2012-05-14 2 views
0

"지금 8시 15 분 오후 시간입니다. 다른 텍스트 뒤에"문장명확히 정규 표현식

가정

이유는 다음과 같은 정규 표현식은 라인과 일치하지 않을까요?

egrep '\<[1-9]\s*:\s*[0-9]{2}\s*[Pp][Mm]\>' file 

내가 GNU의 egrep을을 사용하여, MAC 오전

$ egrep을 --version egrep을 (GNU의 GREP) 2.5.1

+1

"실패"는 어떤 의미입니까? –

+0

일치하지 않습니다. 그것은 분명했다. 나는 – JAM

+0

@ JAM이라는 질문을 업데이트 할 것입니다. 나는 그것이 당신이 의미하는 바가 아주 분명하다고 생각했습니다. 힘든 군중들이 여기 있습니다. – McGarnagle

답변

2

완전히 재현 할 수 없습니다.

맥 OS X 10.7 :

(0)marks-mac-mini> cat file 
The time is now 8:15pm. Followed by some other text 
"The time is now 8:15pm. Followed by some other text" 
(0)marks-mac-mini> egrep '\<[1-9]\s*:\s*[0-9]{2}\s*[Pp][Mm]\>' file 
The time is now 8:15pm. Followed by some other text 
"The time is now 8:15pm. Followed by some other text" 
(0)marks-mac-mini> egrep --version 
egrep (GNU grep) 2.5.1 

그래서 당신이 어딘가에 뭔가 잘못이야 ...

편집 아, 문제는 공간입니다. egrep은 \s을 인식하지 못합니다. 그게 펄시즘이야. 귀하의 질문에는 거기에 공간이 포함되지 않았습니다.

+0

마크, 왜 동일한 정규 표현식을 구문 분석하지 않을까요? "시간은 지금 오후 8시 15 분 일부 텍스트"(오후 이전의 공간)입니다. i \ s * 실패 할 때,''''이 작동합니다. – JAM

+0

편집 된 답변보기 '\ s'는 egrep에서 작동하지 않습니다. –

+0

있습니다. 고마워. – JAM

2

이 때문에 선두의의와 후행 문자 정규식 : < 및> 그것들을 꺼내와 일치합니다.

+0

하지만 그 이유는 무엇입니까? Regex는 [Pp] [Mm] – JAM

+0

@JAM까지 끝까지 잘 작동하는 것 같습니다. 매우 간단합니다. 정규 표현식 패턴을 사용하면 대상 문자열에 있어야합니다. 아마 당신은 그 (것)들을 ** \ b ** (단어 경계) 또는 무엇인가 의미합니까? – McGarnagle

+0

'egrep '[1-9] \ s * : \ s * [0-9] {2} \ s * [Pp]'file'도 해석하지 못합니다. 아니요 <> present – JAM

1

내 OS X 컴퓨터에서 GNU egrep을 사용하면 표현식이 올바르게 작동하고 라인과 일치합니다. grep의 특정 버전이 될 수 있습니다 (비 GNU grep입니까?)

+0

21:24:04 ~/regex $ egrep --version egrep (GNU grep) 2.5.1 – JAM

+0

아, 방금 질문을 보았습니다. 흥미 롭다. 내게 잘 작동하는 것 같다. (위의 질문에서 복사하여 붙여 넣기). – plasma

+0

@JAM : 여기에서 같은 버전을 사용하십시오. – plasma