새 문자열을 구성하기 위해 정규 표현식 (그룹 포함)이있는 문자열 매개 변수 목록을 사용하는 방법이 있습니까?

StackOverflow https://stackoverflow.com/questions/1814036

  •  06-07-2019
  •  | 
  •  

문제

예를 들어 다음과 같은 정규 표현이 있다고 가정 해 봅시다.

"The quick (red|brown|blue|yellow) fox (jumps|leaps) over the lazy (dog|cat)."

이 REGEX에는 3 개의 그룹화 된 구성 요소가 있습니다. 주어진 문자열과 일치하면 Regex API를 사용하면 각 그룹 내부의 값을 쉽게 추출 할 수 있습니다.

이제 3 개의 문자열이 있다고 가정 해 봅시다.

["red", "leaps","cat"]

우리가 그룹 내부에 있지 않은 Regex의 모든 캐릭터가 문자 그대로의 텍스트 문자 일 뿐이라는 가정을한다면, 그 다음 3 개의 문자열을 원래 Regex의 해당 그룹에 삽입하여 출력 문자열이 있습니다. 동정형의 비 그룹화 된 부분을 결합합니까? 이 경우 "빠른 붉은 여우가 게으른 고양이를 뛰어 넘습니다." 바람직하게는 이미 정규식과 일치하는 문자열이 필요하지 않습니다.

나는 Java에서 이것을 찾고자한다 - 나는 java.util.regex가 이것을 지원하지 않는다고 확신하지만, 나는 이것을 할 수있는 타사 lib가있을 것이라고 생각했다. 누구든지 나에게 몇 가지 포인터를 줄 수 있습니까?

도움이 되었습니까?

해결책

중첩 된 캡처 그룹없이 할 수있는 한 리터럴을 검색하기 위해 더 많은 리그를 사용하면 다음을 수행 할 수 있습니다.

String[] strings = new String[] { "red", "leaps", "dog" };
String[] literals = new String("The quick (red|brown|blue|yellow) fox " +
    "(jumps|leaps) over the lazy (dog|cat).").split("(?=[^\\\\])\\(.*?\\)");

StringBuilder sb = new StringBuilder(literals[0]);
for(int i = 0; i < strings.length; i++) {
    sb.append(strings[i]);
    sb.append(literals[i + 1]);
}

// => sb.toString();

다른 팁

대부분의 REGEX 구현은 검색에서 이와 같은 작업을 수행하고 대체 할 수 있습니다.

s/The quick (red|brown|blue|yellow) fox (jumps|leaps) over the lazy (dog|cat)/The quick $1 fox $2 over the lazy $3/
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top