2011-12-28 2 views
0

주어진 숫자가 포함 된 단어를 모두 일치시키는 방법이 궁금합니다.주어진 숫자가 포함 된 단어를 모두 일치시키는 방법은 무엇입니까?

오라일리 정규 표현식 요리 책을 살펴 봤지만 아이디어를 얻지 못했습니다.

케이스 (1) 일부 문자 숫자 앞에있다. (해결) B \

(\ D + [^ \ S] +) \

time=>123, address~4321 

B 사례 2. 일부 문자 숫자 뒤 따른다. (해결) B \

(\ D + [^ \ S] +) \

1234<=range, 321=>location 
,691,363 B210

사례 3. 일부 문자는 네 번째 숫자입니다.

[email protected], address*4321%location 

사례 4. Case1 또는 Case2 또는 Case3의 한 줄로 복제하십시오.

([^\s]*\d+.[^\s]*)\m 

\m 플래그는 정규식 작업을 통해 확인해야합니다 : 당신이 공백을 포함하지 않는 모든 문자열이 될 수있는 단어를 정의하기 때문에

firstTime=12 secondTime=34 
429923<=firstRange    353534=>secondRange 
A12345alpha  B9876beta 
+0

"단어"는 무엇이라고합니까? 공백이없는 문자 시퀀스? – fge

+0

예, 공백 없음 (/ s) –

+0

어떤 언어입니까? – ridgerunner

답변

0

,이 같은 것을 사용 할 수 있습니다 여러 줄.

+0

case1, case2, case3 가능합니다. 고맙습니다. Case4를 어떻게 해결합니까? –

+1

왜 (\ S * \ d + \ S *)가 아니겠습니까? – gpojd

+0

@gpojd : 그래, 그렇게 할 수있어. 나는 네가 일을 끝내기위한 또 다른 방법이라고 생각한다. 답변을 수정했습니다. – npinti

0

입력하여 (\S*(?:\d\S*)*)을 시도해보십시오. 다시 normal\d+ (하나 이상의 숫자) 인 \S (공백 문자 아무것도하지만) 및 special 인과 normal* (special normal*)* 패턴 :

[email protected] ~ $ perl -ne 'print "Match: -->$_<--\n" foreach m/(\S*(?:\d+\S*))/gm' <<EOF 
> firstTime=12 secondTime=34 
> 429923<=firstRange    353534=>secondRange 
> A12345alpha  B9876beta 
> EOF 
Match: -->firstTime=12<-- 
Match: -->secondTime=34<-- 
Match: -->429923<=firstRange<-- 
Match: -->353534=>secondRange<-- 
Match: -->A12345alpha<-- 
Match: -->B9876beta<-- 

을 사용하는 정규식 엔진에 따라, 당신도 모두 함께 소유 한정 기호를 사용할 수있다 , 또는 일치를 가속화하는 원자 그룹.

그리고 당신은 책을 원하는 경우 - 여기>http://regex.info

0

를 숫자 "2"를 포함하는 각 "단어"와 일치하는 정규 표현식이다.

\S*?2\S* 

일치시킬 임의의 숫자 시퀀스로 변경하십시오. 2, 5 또는 7이 포함 된 단어를 검색하려면 문자 클래스를 사용하십시오.

\S*?[257]\S* 
관련 문제