IT이야기

괄호 일치를 위한 정규식

cyworld 2021. 3. 25. 21:37
반응형

괄호 일치를위한 정규식


문자열에서 '('를 일치시키는 정규식은 무엇입니까?

다음은 시나리오입니다.

나는 끈이있다

str = "abc(efg)";

'('정규식 사용하여 문자열을 분할하고 싶습니다.

Arrays.asList(Pattern.compile("/(").split(str))

하지만 다음 예외가 발생합니다.

java.util.regex.PatternSyntaxException: Unclosed group near index 2
/(

탈출 '('이 작동하지 않는 것 같습니다.


두 가지 옵션 :

첫째, 슬래시를 사용하여 이스케이프 할 수 있습니다.\(

또는 단일 문자이므로 이스케이프 할 필요가없는 문자 클래스에 넣을 수 있습니다. [(]


  • 백 슬래시를 사용하여 메타 문자를 이스케이프 할 수 있으므로 (패턴 과 일치시킬 수 있습니다 \(.
  • 많은 언어에는 .Net Regex.Escape또는 Java 와 같은 빌트인 이스케이프 기능 이 있습니다.Pattern.quote
  • 일부 플레이버는 \Q및을 지원 하며 \E사이에 리터럴 텍스트가 있습니다.
  • 일부 플레이버 (예 : VIM)는 (문자 그대로 일치 하며 \(그룹 캡처에 필요 합니다.

참고 항목 : 정규식 기본 구문 참조


솔루션은 열기 및 닫기 괄호와 일치하는 정규식 패턴으로 구성됩니다.

String str = "Your(String)";
// parameter inside split method is the pattern that matches opened and closed parenthesis, 
// that means all characters inside "[ ]" escaping parenthesis with "\\" -> "[\\(\\)]"
String[] parts = str.split("[\\(\\)]");
for (String part : parts) {
   // I print first "Your", in the second round trip "String"
   System.out.println(part);
}

Java 8 스타일로 작성하면 다음과 같이 해결할 수 있습니다.

Arrays.asList("Your(String)".split("[\\(\\)]"))
    .forEach(System.out::println);

분명하길 바랍니다.


특수 문자에는 '\'를 사용해야합니다. 따라서 괄호 일치-/ \ (/


(정규식에서 특별 하기 때문에 \(일치 이스케이프해야합니다 . 그러나 사용하는 언어에 따라 (문자열 메서드와 같은 문자열 메서드 index()나 해당 위치를 찾을 수있는 다른 메서드 쉽게 일치시킬 수 있습니다 (. 때때로 정규식을 사용할 필요가 없습니다.

참조 URL : https://stackoverflow.com/questions/5633533/regular-expression-for-matching-parentheses

반응형