문제

Java에서는 문자열 변수 s가 있다고 가정하고 다른 문자열 t 내에서 검색하고 싶습니다.

   if (T.matches(S)) ...

(참고 : 위의 줄은 T.contains () 이후 몇 개의 게시물이 해당 메소드가 Regexes를 사용하지 않는다는 것을 지적 할 때까지 ()입니다.

그러나 이제 S에 불명예스러운 문자가있을 수 있다고 가정합니다. 예를 들어, S = [HI"를하자. 왼쪽 정사각형 브래킷으로 인해 Regex가 실패하게됩니다. 이런 일이 일어나지 않도록 탈출하기 위해 전화 할 수있는 기능이 있습니까? 이 특별한 경우, 나는 그것이 " [hi"로 변형되기를 원합니다.

도움이 되었습니까?

해결책

String.contains는 Regex를 사용하지 않으므로이 경우 문제가 없습니다.

Regex가 필요한 경우, Regex 특수 문자로 문자열을 거부하는 경우 java.util.regex.pattern.quote를 사용하여 탈출하십시오.

다른 팁

처럼 Tom Hawtin 패턴을 인용해야합니다. 두 가지 방법 으로이 작업을 수행 할 수 있습니다 (편집 : 실제로 세 가지 방법, @소수증):

  1. 문자열을 " q"및 " e"로 둘러싸는 다음과 같습니다.

    if (T.matches("\\Q" + S + "\\E"))
    
  2. 사용 무늬 대신에. 코드는 다음과 같습니다.

    Pattern sPattern = Pattern.compile(S, Pattern.LITERAL);
    if (sPattern.matcher(T).matches()) { /* do something */ }
    

    이렇게하면 컴파일 된 패턴을 캐시하고 재사용 할 수 있습니다. 동일한 정규를 두 번 이상 사용하고 있다면 거의 확실히 이런 식으로하고 싶다.

정규 표현식을 사용하여 문자열이 더 큰 문자열 내부에 있는지 테스트하는 경우, 표현식의 시작과 끝에 배치해야합니다. 그러나 패턴을 인용하면 실제 점을 찾고 있기 때문에 이것은 작동하지 않습니다. 그래서, 당신은 정규 표현식을 사용하고 싶다고 확신합니까?

노력하다 Pattern.quote (String). 문자열에서 특별한 의미를 가진 모든 것을 고칠 것입니다.

대신 string.indexof ()를 사용하지 않는 특별한 이유가 있습니까? 그렇게하면 항상 정규식이 아닌 일반 문자열로 해석됩니다.

Regex는 백 슬래시 문자 ''를 사용하여 문자를 탈출합니다. Java는 Backslash 문자를 사용한다는 점을 감안할 때 다음과 같은 이중 부스트 슬래시를 사용해야합니다.

   String S = "\\[hi"

그것은 문자열이 될 것입니다 :

  \[hi

Regex에게 전달됩니다.

또는 문자 그대로의 문자열에만 관심이 있고 재선이 필요하지 않으면 다음을 수행 할 수 있습니다.

if (T.indexOf("[hi") != -1)  {

t.contains () (Javadoc에 따르면 : http://java.sun.com/javase/6/docs/api/java/lang/string.html)는 Regexes를 사용하지 않습니다. () 대의원이 indexof () 만 포함합니다.

따라서 여기에는 사용 된 regexes가 없습니다. 다른 문자열 방법을 생각하고 있었습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top