정규식이 https://regex101.com/r/PPbhRn/1입니다. 여기에서 "and"가 캡처되면 위에서 캡처 한 일부 공백을 볼 수 있음을 알 수 있습니다. 그 공백을 제거 할 수있는 방법이 있습니까? 그룹화가 올바르게 캡처 된 경우에만 패턴이 일치하는지 여부를 알고 싶습니다. 내가 제대로 그룹을 캡처 할 수 아니에요정규식 그룹화 및 일치
String validRegex="(((?:[(]* ?[a-z][a-z]+ ?[)]*)|[(]* ?(NOT) (?:[(]* ?[a-z][a-z]+ ?[)]*) ?[)]*)((AND|OR) ((?:[(]* ?[a-z][a-z]+ ?[)]*)|[(]* ?(NOT) (?:[(]* ?[a-z][a-z]+ ?[)]*) ?[)]*))*)";
String formula = "mean AND trip OR (mean OR mango) AND (mean AND orange) OR mango AND (test OR NOT help)";
Pattern p1 = Pattern.compile(validRegex, Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
final Matcher matcher = p1.matcher(formula);
boolean result=MarketMeasureUtil.isValidFormula(formula);
System.out.println(result);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
System.out.println(matcher.group() + "starting at" + "index" + matcher.start()+ "and ending at index" +matcher.end());
}
, 난 등 "을 의미 및 여행"와 같은 그룹을 캡처 "OR" "의미 또는 망고"필요 .. isValidFormula()는 정규식을 호출합니다. 성냥(). 우리의 경우에는 일치가 잘 작동합니다. 그룹화가 예상대로 작동하지 않습니다.
전체 일치에만 해당 공백이 포함됩니다. 그룹 2는 단지 '와'항상 ... – marekful
나는 ("사과 AND 파인애플 OR (계란) AND (파인애플)와 같은 문자열을 캡처하는 정규식이 필요합니다. 단어와 같은 제약 조건은 술어"AND/OR에 따라야합니다. "그리고 또한 그룹을 부유하게 포착해야합니다. 내가 위의 일치하는 그룹을 제대로 잡을 수없는 정규식을 시도하면 .. 거기에 어떤 방법으로 정렬? @marekful –
질문을 편집하고 시도한 실제 문제와 Java 코드를 보여주십시오. 정규 표현식은 모든 언어/도구마다 약간 씩 다르기 때문에 Regex101 링크를 기반으로 대답해야한다고 생각하지 않습니다. –