문자열의 시작 부분에있는 단어와 일치하는 정규식을 어떻게 만듭니 까? 우리는 stop
문자열의 시작 부분에서 일치하는 것을 찾고 있으며 그 뒤에는 무엇이든 할 수 있습니다.
예를 들어 표현식은 다음과 일치해야합니다.
stop
stop random
stopping
감사.
답변:
사용 중지로 시작하는 줄만 일치 시키려면
^stop
stop 단어로 시작하는 줄과 공백을 일치 시키려면
^stop\s
또는 stop이라는 단어로 시작하지만 그 뒤에 공백이나 다른 단어가 아닌 문자가 오는 행을 일치 시키려면 사용할 수 있습니다 (정규식 버전 허용).
^stop\W
반면에 다음은 대부분의 정규식 버전에서 문자열의 시작 부분에있는 단어와 일치합니다 (이 버전에서 \ w는 \ W의 반대와 일치).
^\w
맛에 \ w 바로 가기가 없으면 다음을 사용할 수 있습니다.
^[a-zA-Z0-9]+
이 두 번째 관용구는 문자와 숫자 만 일치하며 기호는 전혀 일치하지 않습니다.
허용되는 단축키와 정확히 일치하는 항목 (및 유니 코드 처리 방법)을 알아 보려면 정규식 버전 매뉴얼을 확인하십시오.
^stop\b
라인 끝을 포함하여 모든 경계를 허용 하는를 잊지 마십시오
이 시도:
/^stop.*$/
설명:
중지 뒤에 공백을 적용하려면 RegEx를 다음과 같이 수정할 수 있습니다.
/^stop\s+.*$/
참고 : 위의 RegEx에서는 중지 단어 뒤에 공백이 있어야합니다. 따라서 다음 만 포함하는 줄과 일치하지 않습니다. stop
단어 뒤에 일치하는 항목을 찾으려면 줄의 시작 부분뿐만 아니라 다음을 사용할 수 있습니다 \bstop.*\b
.- 단어 뒤에 줄
아니면 문자열 사용 단어와 일치 할 경우 \bstop[a-zA-Z]*
- 정지로 시작하는 단어 만
또는 ^stop[a-zA-Z]*
단어 만 중지 된 줄의 시작 - 첫 번째 단어 만
전체 줄 ^stop.*
- 문자열의 첫 번째 줄만
줄 바꿈을 포함하여 stop으로 시작하는 모든 문자열을 일치 시키려면 다음을 사용하십시오. /^stop.*/s
- stop으로 시작하는 여러 줄 문자열
@SharadHolani가 말한 것처럼. " stop "으로 시작하는 모든 단어와 일치하지는 않습니다.
. " stop going " 과 같은 줄의 시작 부분에있는 경우에만 . @Waxo는 정답을 제시했습니다.
" stop "으로 시작하고 A에서 Z 까지 의 문자 만 포함하는 단어를 찾으려면 이 방법이 약간 더 좋습니다 .
\bstop[a-zA-Z]*\b
이것은 모두 일치합니다
중지 (1)
무작위로 중지 (2)
중지 (3)
멈추고 싶다 (4)
그만 해주세요 (5)
그러나
/^stop[a-zA-Z]*/
(3)까지 (1) 만 일치하지만 (4) & (5)는 일치하지 않습니다.
/stop([a-zA-Z])+/
중지 단어 (중지, 중지, 중지 등)와 일치합니다.
그러나 문자열의 시작 부분에서 "stop"을 일치 시키려면
/^stop/
할 것이다 : D
이 문제에 대한 간단한 정규식 접근 방식에 반대하는 것이 좋습니다. 관련이없는 다른 단어의 하위 문자열 인 단어가 너무 많으며 이미 제공된 더 간단한 솔루션을 과도하게 조정하려고 할 때 정신이 없을 것입니다.
텍스트를 먼저 처리하려면 최소한 순진한 형태소 분석 알고리즘 (Porter 형태소 분석기를 사용해보십시오. 대부분의 언어로 제공되는 무료 코드가 있음)이 필요합니다. 이 처리 된 텍스트와 전처리 된 텍스트를 두 개의 별도 공간 분할 배열에 보관합니다. 알파벳이 아닌 각 문자도이 배열에서 자체 인덱스를 가져야합니다. 필터링하는 단어 목록이 무엇이든 상관없이 그 단어를 정리하십시오.
다음 단계는 형태소 '중지'단어 목록과 일치하는 배열 색인을 찾는 것입니다. 처리되지 않은 배열에서 제거하고 공백에서 다시 결합하십시오.
이것은 약간 더 복잡하지만 접근 방식이 훨씬 더 신뢰할 수 있습니다. NLP 지향적 접근 방식의 가치에 대해 의구심이 있다면 명백한 실수에 대한 조사를 할 수 있습니다 .
단어를 "stop"으로 시작하려면 다음 패턴을 사용할 수 있습니다. "^ stop. *"
stop으로 시작하는 단어와 그 뒤에 오는 단어와 일치합니다.
"^stop"
없습니까?
code
String line = "stopped";
String pattern = "^stop";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
System.out.println(m.find( )); //prints true
System.out.println(line.matches(pattern)); //prints false