2015-01-25 3 views
1

정규식과 일치하는 줄을 입력하고 싶습니다. 이 줄에는 더하기, 빼기 또는 별 (곱하기)로 나눌 수있는 두 개의 숫자가 들어 있습니다. 그러나 나는 별을 피하는 방법을 모르겠습니다. Java - 정규식의 Escape 별

line.matches("[0-9]*[+-*][0-9]*"); 

는 또한 line.matches("[0-9]*[+-\\*][0-9]*"); 시도했지만 중 하나가 작동하지 않습니다.

별을 별개의 그룹으로 넣어야합니까? 왜이 경우에는 도망 치는 \\*이 작동하지 않습니까?

답변

3

*character class ([...])의 메타 문자가 아니므로 전혀 이스케이프하지 않아도됩니다. 문자 클래스 내에서 [a-z]과 같은 문자 또는 문자를 생성해야하기 때문에 이스케이프해야하는 것은 -입니다. 이 (: [-+*] 또는 [+*-] 시작 또는 문자 클래스의 끝에서) 범위로 사용할 수 없습니다 수있는

그래서 대신 "[+-*]"+* 사용 "[+\\-*]" 또는 -을 배치 사이에서 유니 코드 표에 배치 모든 문자를 나타냅니다.

BTW 당신은 ​​당신이 (이 메타 문자 그래서 우리는 또한 탈출 할 필요가 \w 같은 표준 문자 클래스를 탈출하거나 액세스하는 데 사용됩니다) \\로 정규식을 쓸 필요가 귀하의 사업자에하지만 이후 문자 \을 추가하려는 경우 \은 또한 문자열에서 특별하기 때문에 거기에서 탈출해야합니다. 그러면 "\\\\"이됩니다.

또한 [0-9]을 쓰는 대신 으로 문자열에 작성해야하는 \d을 간단하게 사용할 수 있습니다. 당신이 + 하나 이상의 발생 또는 이전 요소를 나타냅니다 이후 + 대신 *을 사용해야합니다 운영자에 의해 구분 된 문자열에서 두 개 이상의 숫자가있는 경우가 있는지 확인하려면 *가 0 개 이상을 나타낸다
또 다른 것은,이다 발생.

그래서 코드는

line.matches("\\d+[+-*]\\d+"); 
처럼 보일 수 있습니다