2011-07-06 3 views
1

좋아, 난 꽤 까다로운 정규식 문제가 있습니다.양면을 평가하는 Lookaround 정규식?

다음 문자열의 + 기호를 공백으로 바꾸고 바꾸어야하므로 왼쪽의 문자열이 오른쪽의 문자열이되어야합니다. 인접한 더하기 기호의 내가 할 수있는 유일한 못 한 세트, 그러나

(?<=[\w\.,])\+(?=[\w]) 

:

1: word+word = word word 
2: word+++word = word + word 
3: word.+word = word. word 
4: word,+word = word, word 

나는 '대부분의 EM 전에 문자열을 확인하는이,와 후 더하기 기호를 못을 관리했습니다 (2) 한 번에 내 현재 정규식에서

(?<=[\w\.,\+])\+(?=[\w]) // gets the left plus sign 
2: word+++word = word++ word 

(?<=[\w\.,])\+(?=[\w\+]) // gets the right plus sign 
2: word+++word = word ++word 

상태를-기진 맥진 할

, 내가 더 큰 상태에서 패턴을 포장해야하거나 나도 또는 패턴을 구현해야하는 경우 궁금 해요 둘러보기에서. 어떤 정규 표현가가이 소용돌이에 신경을 쓰고 있습니까?

+0

무엇에 대해'foo는 ++++ 바 ++++++ baz'? – Qtax

+0

사용중인 프로그래밍 언어는 무엇입니까? 모든 향이 둘러보기를 지원하지는 않습니다. –

+0

정규 표현식에 문제가있어 정규 표현식이 옳지 않다는 것을 의미하므로 보통 단어를 쓰려고하지 마십시오. – sawa

답변

3

이것은 당신의 예에서 작동합니다 :

(?<!\+)\+|\+(?!\+) 

가 공백이를 교체합니다.

예 :

perl -E "$_='a+b++a+++b++++c+++++d'; s/(?<!\+)\+|\+(?!\+)/ /g; say" 

출력 :

a b a + b ++ C+++ d