정규식이 올바르지 않습니다. 첫 번째 "에있는"이전에 발생 한 "단어를"원하는 경우
, 당신은 사용할 수 있습니다 : 나는 공백이 아닌 문자가 \S
를 사용하여 의미하는 "단어"를 정의하고 있습니다
"This is sample text located at first line and located at second line."[/(\S+)\s+located at/, 1]
=> "text"
, 그래서 구두점과 숫자가 알파 문자에 포함됩니다. [A-Za-z0-9_]
을 원하면 \w
과 같은 다른 클래스를 사용할 수 있습니다. 그렇지 않으면 같은 [a-z]
를 사용
"This is sample text located at first line and located at second line."[/([a-z]+)\s+located at/i, 1]
=> "text"
당신은 "샘플"과 먼저, 당신이 사용할 수있는 "에있는"사이에 발생하는 모든 텍스트하려면 다음
"This is sample text located at first line and located at second line."[/sample\s+(.+?)\s+located at/, 1]
=> "text"
당신의 패턴 /test.*sample(.*)located at?/
에서, 당신은 것을 0보다 많거나 더 많은 것을 의미하는 복수 .*
을 사용합니다 (그러나 실제로는 컨텍스트에 따라 다르지 않지만 지금 당장 필요 이상으로 중요합니다). 욕심 때문에 "더 많이"당신이 충돌하고있는 부분입니다. 그리고, 당신이 그것을 두 번 사용하기 때문에, 그것은 두 배로 욕심이납니다. ?
을 추가하여 "비 탐욕스러운"변형을 사용할 수는 있지만 정규식 엔진에 너무 많은 로프를 가지고 있기 때문에 여전히 올바르게 작동하지 않습니다. 내 패턴은 모든 것을 강화하여 처음 두 개에서 ?
수정자를 사용할 필요성을 줄입니다.
제 3의 예는 다시 .+
이 욕심을 먹었을 것이므로 중재해야했습니다.
마지막으로, 패턴 at?
이 .*
을 수정 ?
적용되지 않으며,이 일에 엔진을 일으키는 원인이되는 선행하는 t
에 작용하는 것하지 않은, "제로 또는-한 't'를 찾을 수 있어야합니다" 그것이 "a"또는 "at"와 일치하기 때문에 원하는 것을 선택하십시오.
'test'가'text'이어야하는 경우에도 'test'다음에'sample'을 찾고 싶기 때문에 정규 입력은 예제 입력에서 작동하지 않습니다. 그리고'? '를 사용하여 무언가를 무언가로 만들고 싶다면'. *?'와 같이 한정 기호 다음에'? '를 써야합니다.rubular를 링크하지 않고 Rubular에 대한 실제 테스트 예제 (페이지 하단의'make permalink'를 클릭하십시오.) –
@ m.buettner @ m.buettner 실수로 유감스럽게 생각합니다. http://rubular.com/r/LB1ESohvuK –