2011-01-27 4 views
0

검색 할 내용이없는 경우에만 검색 할 수 있습니다.정규 표현식 gsub 전에 아무것도없는 경우에만

예를 들어 게시물이 있고 슬래시를 스캔하고 있는데 그 뒤에 오는 문자가 있지만 시작 문자가 아닌 경우 슬래시는 스캔하지 않으려합니다.

/여기를 스캔하고 싶지만이/여기 또는 http://this.com을 스캔하고 싶지 않습니다. 내가 현재 사용하고 정규 표현식은

..

/\/(\w+)/ 

나는 각/forwardslash을 연결하는 GSUB 이것을 사용하고 있습니다.

답변

3

나는 '/'로 시작하는 단어 나 문자열이 아니라 '/'로 시작하는 단어 만 일치시키는 것으로 생각한다고 생각합니다. 그게 사실이라면, 나는 다음과 같은 정규식이 작동합니다 생각 : %r{(?:^|\s+)/(\w+)} : 예를 들어

:

"/foo /this this/that http://this".scan %r{(?:^|\s+)/(\w+)} # => [["foo"], ["this"]] 
+0

[Rubular에서 테스트 됨] (http://rubular.com/r/ZzQAp3YT8Y), 작동합니다. +1 – edgerunner

+0

그 말로! 고맙습니다. – morcutt

2

캐럿 (^) 문자는 "문자열의 시작"을 의미합니다. 달러 기호 ($)는 "문자열의 끝"을 의미합니다.
그래서

/^\/(\w+)/ 

... 당신이 원하는 무엇을 얻을 것이다 - 단지 문자열의 시작 부분에 일치.

+3

캐럿과 달러 기호는 실제로는 행의 시작/끝입니다. 문자열의 끝, 예를 들어 여러 줄 문자열을 실제로 시작하려면 \ A와 \ Z를 사용합니다. –

0

우선, 당신이 다른 것으로 구분 기호를 변경 슬래시와 정규식을 사용하고 있기 때문에, 당신은 백 슬래시를 벗어날 필요가 없으며 읽기가 더 쉬울 것입니다.

두 번째로, 슬래시도 바꾸려면 캡처에 포함 시키십시오.

On the regex.

...이 행의 처음 문자 ...

...없는 경우 : 그것은 처음 문자가 아닌 경우

!^(/\w+)! 

은 ...

... 단어 :

!\s(/\w+)! 

하지만 행의 맨 앞에있는 경우에는 일치하지 않습니다. 이를 위해서는 좀 더 복잡한 것이 필요합니다. 그래서 나는 단지 그 괴물을 만드는 대신 여기에 정규 표현식을 사용합니다.

+0

캠이 더 나은 정규식을 부여했습니다. – iain