Как сопоставить строку в предложении и не захватывать части строки совпадения - PullRequest
0 голосов
/ 30 апреля 2020

Я не уверен, правильно ли я понял название проблемы, с которой столкнулся. Моя цель - написать скрипт в Jira, чтобы найти все запросы фильтра, содержащие заданное предложение c, а затем изменить результаты сопоставления фильтров (с новой строкой), чтобы вставить новое слово в запрос. Последняя часть, касающаяся изменения, работает.

Моя проблема в том, что когда я ищу все запросы фильтра в Jira, который содержит мой поиск, я получаю некоторые результаты, которые соответствуют всему предложению, и некоторые результаты, которые соответствуют части предложения. Моя цель - просто соответствовать всему предложению.

Например, если у меня есть запрос фильтра в Jira, который выглядит следующим образом: project in (Produksjonsendring, Fagsystemer, AdminDok) AND issuetype = Produksjonsendring AND status = Timeslotting AND resolution = EMPTY OR project = "NAV IT" OR project = "NAV IT" OR project = "NAV IT" AND project = Fagsystemer. Я не только ищу project in (.*Produksjonsendring.*). Это означает, что Produksjonsendring включен в paranthese. Но я также получаю результаты по фильтру с запросом, содержащим project in и project not in (Produksjonsendring)

Например, фильтр, которому я не хочу соответствовать: project in (ATOM) AND resolution = Unresolved AND status != Canceled AND assignee is EMPTY OR project in (MDEPLOY) AND issuetype = "Manuell Deploy" AND resolution = Unresolved AND status != Canceled AND assignee is EMPTY OR "Ansvarlig gruppe" = "IT IP Applikasjonstjenere og meldingsflyt (ATOM) (CMDB-707)" AND project not in (Templates, Produksjonsendring) AND resolution in (Unresolved) AND status != Canceled AND assignee is EMPTY ORDER BY key ASC, created. Здесь вы можете видеть, что скрипт соответствует project in и project not in (Templates, Produksjonsendring).

Итак, я должен искать фильтр с запросом, который содержит все предложение project in (.*produksjonsendring.*)?

Я пытался чтобы отсканировать это с помощью регулярного выражения без каких-либо результатов: queryString.find("(((?i)Project in [(].*?Produksjonsendring.*[)])")) Я попробовал функцию .matching, но затем я получаю только фильтрующие запросы, которые содержат только то, что я ищу, а не другие запросы, содержащие это предложение в запросе.

Это весь мой сценарий:

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.bc.filter.SearchRequestService
import com.atlassian.jira.bc.JiraServiceContext
import com.atlassian.query.*
import com.atlassian.jira.bc.JiraServiceContextImpl
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.bc.issue.search.SearchService
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.bc.user.search.UserSearchService
import com.atlassian.jira.bc.user.search.UserSearchParams
import com.atlassian.jira.user.util.UserUtil
import com.atlassian.jira.user.util.UserManager
import com.atlassian.jira.issue.search.SearchRequest
import org.apache.log4j.Logger

def log = Logger.getLogger("Filter.search.logger")

UserUtil userUtil = ComponentAccessor.getUserUtil()
def userSearchService = ComponentAccessor.getComponent(UserSearchService)
def cm = ComponentAccessor.getUserManager()
def searchRequestService = ComponentAccessor.getComponent(SearchRequestService.class)
def searchService = ComponentAccessor.getComponent(SearchService)
def loggedInUser = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
def ctx = new JiraServiceContextImpl(loggedInUser)

def userSearchParams = new UserSearchParams.Builder()
    .allowEmptyQuery(true)
    .ignorePermissionCheck(true)
    .maxResults(20000)
    .build()
def allActiveUsers = userSearchService.findUsers("", userSearchParams)
allActiveUsers.size()

def output = ""

for (user in allActiveUsers) {
    searchRequestService.getOwnedFilters(user).each() { SearchRequest filter ->
def query = filter.query
  def queryString = searchService.getJqlString(query)
  if (queryString.find("(((?i)Project in [(].*?Produksjonsendring.*[)])"))  {
      log.warn "[EVENT]: Søkestreng funnet " + queryString;

      String newQueryString = queryString.replaceAll("(?!Project in)(?<!/D)(?=[)])", ", Eiendom") 
    def newQuery = searchService.parseQuery(user, newQueryString).query
    filter.setQuery(newQuery)    
   searchRequestService.updateFilterOwner(ctx,user,filter) 
    log.warn "Filter endret"

      output = queryString
      log.info  queryString
  }


}
}
return output
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...