2010-01-28 2 views
2

에서 그룹 일치를 잡아되지 않음 : 루비나는 다음과 같은 문자열을 분해하려고 루비 정규식

"@command Text1 @command2 Text2" 

합니다. 배열에서 "Text1"과 "Text2"를 꺼내려고합니다.

text.scan(/@* (.*?)(@|$)/) 

그러나 실행할 때, 괄호는 루비에 사용되는 아마도 때문에 스크립트가 (별도의 일치로 중간에 @ 기호를 데려가는 것은 표시하는

: 나는 검색 방법을 사용하여이 사용하고이 작업을 수행하려면 어떤 문자열 당신은) 입력의 철수 할 :

Text1 
@ 
Text2 

내 질문에 내가 표현 "@"하고 말 모두에서 일치하는 중지 할 필요가 명심 텍스트 1, 텍스트 2를 꺼내 수있는 방법이다 끈? 당신이 비 캡처 그룹을 사용하려면

답변

5

:이 오류를 포함 할 수 있습니다처럼

text.scan(/@* (.*?)(?:@|$)/) 

(!) 참고로, 당신의 정규 표현식 보인다. 아마 당신이 대신이 뜻?

text.scan(/@\w+ (\w+)(?= @|$)/) 

의 차이는 표현은 내가 의도하지 추측하는 " foo"에 일치한다는 것입니다.

1
text.scan(/@* (.*?)(?:@|$)/)' 
1

정규식에서 '@ | $'주변에 괄호가 필요하지 않습니다. 해당 그룹에서 하나의 문자 만 찾고 있기 때문에

text.scan(/@* (.*?)[@\$]/) 

, 대괄호 내에서 한 문자와 일치합니다 다음 '@'없이 같은 일을 수행합니다 다음은 별도의 일치 그룹에 반환 그들. 여기

0

내가 그것을 할 거라고 방법은 다음과 같습니다

text.scan(/@[^\s]* ([^@]*)/) 
관련 문제