2014-07-07 2 views
3

정규식TheA을 제외한 단어의 첫 번째 자를 가져야합니다. 입력 문자열의 각각의 처음 세 문자를 잡고 "^(.{3}).*$특정 단어를 제외하는 정규식

을 : 여기

The firstMatch 
A SecondMatch 
the thirdMatch 
a Fourthmatch 

내가 시도 정규식 :

예를 들어, 여기 내 샘플 데이터 세트입니다. 하는 방법에 대한

'fir', 'Sec, 'thi', 'Fou' 

어떤 생각 :하지만 제가 정말 원하는 것은 위의 입력이 내가 원하는 일치하는 문자열이며,

그래서 A 또는 The 포함하여 각 입력 문자열 하지의 처음 세 문자입니다 이 작업을 수행?

+0

어떤 언어를 사용하고 있습니까? – zx81

+0

ruby를 사용하고 있습니다. – user3562302

+0

@ zx81 요즘 PCRE를 사용하는 모든 언어에 대해서는별로 중요하지 않습니다. – MightyPork

답변

4

사용되는 정규식 엔진이 달려있다 (원래 질문은 Ruby 태그되지 않은, 그래서 다른 옵션을 떠날 수 있습니다.)

옵션 1 : Lookbehind (C#을, PHP, 자바)

(?im)(?<=^The |^a)\w{3} 

demo을 참조하십시오.

많은 엔진이 lookbehind를 지원하지만 다양한 너비의 lookbehind를 지원하지는 않습니다.

옵션 2 : \K (PHP, 펄, 루비 2+)

(?im)^(?:The |a)\K\w{3} 

demo를 참조하십시오.

\K 그것이

옵션 3을 반환 결승전에서 지금까지 일치 된 것을 드롭 엔진을 알려줍니다 그룹 (자바 스크립트, 파이썬, 등) the demo에서

(?im)^(?:The |a)(\w{3}) 

캡처, 오른쪽 창에서 그룹 1 캡처를보십시오.

괄호는 그룹 1과 일치하는 항목을 캡처합니다. 그룹 1에서 검색합니다.

설명

  • (?i)
  • ^ 앵커는 우리가 주장
  • (?m) 각 줄에 맞게 ^$을 허용, 멀티 라인 모드를 전환하는 경우 - 무감각 라인 켜집니다 문자열의 시작 부분에
  • (?<=^The |^a)은 th를 선언하는 lookbehind입니다. 무엇을 현재의 위치를 ​​선행하는 문자열 및 The, 또는 다음 a
  • (?:The |a) 문자열의 시작의 시작이에 (\w{3}) 캡처 경기에
  • 괄호 내부 또는 | 교대와 비 캡처 그룹 그룹 1

참조

+0

우수 답변! –

+0

고마워, 캐리. :) – zx81

3

사용이 :

^(?:(?:the|a)\s+)?(.{3}) 

대소 문자 구분 검색을 사용하여.

원래 정규식의 .*$ 부분은 무의미합니다.

1

당신이

내가 당신을 다음 시간을 제안 멀티 라인, 글로벌 및 영향을받지 수정을 사용해야되고,이

^(the|A)? *(.{3}).+$ 

을 끄는 그룹이처럼 뭔가를 할 수 사용하는 정규 표현식 컴파일러를 지정하십시오.

관련 문제