"stop"으로 시작하는 문자열을 일치시키는 정규 표현식


99

문자열의 시작 부분에있는 단어와 일치하는 정규식을 어떻게 만듭니 까? 우리는 stop문자열의 시작 부분에서 일치하는 것을 찾고 있으며 그 뒤에는 무엇이든 할 수 있습니다.

예를 들어 표현식은 다음과 일치해야합니다.

stop
stop random
stopping

감사.

답변:


187

사용 중지로 시작하는 줄만 일치 시키려면

^stop

stop 단어로 시작하는 줄과 공백을 일치 시키려면

^stop\s

또는 stop이라는 단어로 시작하지만 그 뒤에 공백이나 다른 단어가 아닌 문자가 오는 행을 일치 시키려면 사용할 수 있습니다 (정규식 버전 허용).

^stop\W

반면에 다음은 대부분의 정규식 버전에서 문자열의 시작 부분에있는 단어와 일치합니다 (이 버전에서 \ w는 \ W의 반대와 일치).

^\w

맛에 \ w 바로 가기가 없으면 다음을 사용할 수 있습니다.

^[a-zA-Z0-9]+

이 두 번째 관용구는 문자와 숫자 만 일치하며 기호는 전혀 일치하지 않습니다.

허용되는 단축키와 정확히 일치하는 항목 (및 유니 코드 처리 방법)을 알아 보려면 정규식 버전 매뉴얼을 확인하십시오.


27
답을 일반화하려면 +1하십시오. Stack Overflow에서 더 많은 것을보고 싶습니다. 제 생각에는 더 나은 학습 리소스로 만듭니다.
Jim

대소 문자를 구분하지 않는 방법, 즉 Stop, stop 또는 sTop과 일치합니까?
Elton Garcia de Santana

언어에 따라 다릅니다. Perl 호환은 I 수정자를 사용할 수 있습니다. / regex / i .NET RegexOptions.IgnoreCase 등
Vinko Vrsalovic

^stop\b라인 끝을 포함하여 모든 경계를 허용 하는를 잊지 마십시오
Mad Physicist

80

이 시도:

/^stop.*$/

설명:

  • / 문자는 정규식을 구분합니다 (즉, 정규식 자체의 일부가 아님).
  • ^ 는 줄의 시작 부분이 일치 함을 의미합니다.
  • . 뒤에 * 는 모든 문자 (.), 횟수 제한 없음 (*)과 일치 함을 의미합니다.
  • $ 는 줄 끝을 의미합니다.

중지 뒤에 공백을 적용하려면 RegEx를 다음과 같이 수정할 수 있습니다.

/^stop\s+.*$/
  • \ s 는 모든 공백 문자를 의미합니다.
  • + 뒤에 \ s 는 중지 단어 뒤에 공백 문자가 하나 이상 있어야 함을 의미합니다.

참고 : 위의 RegEx에서는 중지 단어 뒤에 공백이 있어야합니다. 따라서 다음 만 포함하는 줄과 일치하지 않습니다. stop


모든 언어가 정규식을 구분하기 위해 슬래시를 사용하는 것은 아닙니다.
JAB

1
@Cat Megex : 바로 이것이 제가 설명을 추가 한 이유입니다. 귀하의 언어가 정규식을 구분하기 위해 다른 것을 사용하는 경우 /를 적절한 문자로 대체하십시오
Mike Dinescu 2009-08-06

1
@Mez 예와 같은 리던던시 모두 투명감과 성능 향상 rexegg.com/regex-optimizations.html#anchors을
MarredCheese

28

단어 뒤에 일치하는 항목을 찾으려면 줄의 시작 부분뿐만 아니라 다음을 사용할 수 있습니다 \bstop.*\b.- 단어 뒤에 줄

문자열 끝까지 단어

아니면 문자열 사용 단어와 일치 할 경우 \bstop[a-zA-Z]*- 정지로 시작하는 단어 만

stop으로 시작하는 단어 만

또는 ^stop[a-zA-Z]*단어 만 중지 된 줄의 시작 - 첫 번째 단어 만
전체 줄 ^stop.*- 문자열의 첫 번째 줄만

줄 바꿈을 포함하여 stop으로 시작하는 모든 문자열을 일치 시키려면 다음을 사용하십시오. /^stop.*/s- stop으로 시작하는 여러 줄 문자열


20

@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)는 일치하지 않습니다.


8
/stop([a-zA-Z])+/

중지 단어 (중지, 중지, 중지 등)와 일치합니다.

그러나 문자열의 시작 부분에서 "stop"을 일치 시키려면

/^stop/

할 것이다 : D


2
이것은 "가는 중지하지 마십시오"일치합니다
알렉스 B

1
이것은 stop123 또는 stop,과 일치하지 않습니다.
lostintranslation

7

"중지", "중지"및 "중지"를 포함하여 "중지"로 시작하는 항목을 일치 시키려면 다음을 사용하십시오.

^stop

"stop going", "stop this" 와 같이 단어 stop 다음에 오는 단어 를 일치 시키려면 "stopped"및 "stopping"이 아닌 다음을 사용하십시오.

^stop\W

0

이 문제에 대한 간단한 정규식 접근 방식에 반대하는 것이 좋습니다. 관련이없는 다른 단어의 하위 문자열 인 단어가 너무 많으며 이미 제공된 더 간단한 솔루션을 과도하게 조정하려고 할 때 정신이 없을 것입니다.

텍스트를 먼저 처리하려면 최소한 순진한 형태소 분석 알고리즘 (Porter 형태소 분석기를 사용해보십시오. 대부분의 언어로 제공되는 무료 코드가 있음)이 필요합니다. 이 처리 된 텍스트와 전처리 된 텍스트를 두 개의 별도 공간 분할 배열에 보관합니다. 알파벳이 아닌 각 문자도이 배열에서 자체 인덱스를 가져야합니다. 필터링하는 단어 목록이 무엇이든 상관없이 그 단어를 정리하십시오.

다음 단계는 형태소 '중지'단어 목록과 일치하는 배열 색인을 찾는 것입니다. 처리되지 않은 배열에서 제거하고 공백에서 다시 결합하십시오.

이것은 약간 더 복잡하지만 접근 방식이 훨씬 더 신뢰할 수 있습니다. NLP 지향적 접근 방식의 가치에 대해 의구심이 있다면 명백한 실수에 대한 조사를 할 수 있습니다 .


0

단어를 "stop"으로 시작하려면 다음 패턴을 사용할 수 있습니다. "^ stop. *"

stop으로 시작하는 단어와 그 뒤에 오는 단어와 일치합니다.


1
그냥 사용할 수 "^stop"없습니까?
스티븐 라우 흐

때에 따라 다르지. Java 구문으로 이야기하는 동안 정규식을 사용하기 위해 Pattern 및 Matcher 객체를 사용하거나 String 객체와 함께 .matches () 메서드를 직접 사용할 수 있습니다. 그들은 다음과 같이 결과에서 차이 : 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
Manisha Chaurasia에게

1
줄의 시작 부분에있는 단어 만 일치합니다. "stop"으로 시작하는 단어가 줄의 중간이나 끝에 있으면이 정규식은 일치하지 않습니다. @StephenRauch [az] *를 생략하면 전체적으로 "중지"와 같은 단어를 얻을 수 없습니다. "stopping"의 경우 "stop"이 표시되고 "ping"이 누락됩니다.
Sedat Kilinc
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.