2013-11-29 6 views
1

특정 패턴 이후에 모든 것을 일치시킬 수 있습니까? 예와 예를 들어정규식 - 지정된 패턴 뒤에 일치

starting-this is my string- 

내가 문자열이 다음 몇 가지 문자와 하이픈 다른 하이픈으로 종료됩니다 내가 원하는 값으로 시작 것이라는 점을 알고있다 위.

그래서 내가 찾고자하는 예에

정규식이 작업을 수행 할 수 그것이 "이것은 내 문자열은"?

답변

2

에 따라 다릅니다. RegExp의 모든 구현은 다릅니다. 예를 들어 자바 스크립트에서는 할 수 없지만 Ruby에서는 할 수 있습니다. 당신이 찾고있는 기능을 "긍정적 인 lookbehind"라고합니다.

/(?<=starting-)this is my string(?=-)/ 

당신은 긍정적 인 lookbehind 여기에 긍정적 예측 모두의 예를 가지고 전자는 뒤에 "이"당신이 "starting-"가지고 제로 폭 주장이고, 후자는 제로 폭 주장입니다 "문자열"뒤에 "-"가 있습니다.

RegExp의 대부분의 기능에는 미리보기가 있습니다. 일부는 (예 : JS) lookbehind가 없습니다.

당신이하지 않으면, 당신이 할 수있는 몇 가지 트릭이 있습니다. 성냥이 중복 수 없기 때문에

/starting-(this is my string)-/ 

그러나, 가끔이 방법을 사용하지 못할 수 있습니다 : 가장 쉬운 하나는 비 lookbehind의 정규 표현식을하고, 원하는 문자열을 캡처하는 것입니다. 당신이 해시에 둘러싸인 단어와 일치하고,

/#(\w+)#/g 

을 시도하고 같은 문자열에 그것을 시도하려고하면 예를 들어, 당신은 단지 것, "내 # 말 #은 # 아침 식사 번호 # 건초 # 먹고 # 좋아한다" "# eat #"및 "# for #"에 대한 일치가 "건초"및 "아침"주변의 해시를 소비하므로 "말", "먹기"및 "사용"을 얻습니다.

다른 하나는 문자열과 패턴을 모두 되돌리고 대신 미리보기를 사용하는 것입니다. 그러나 이것은 읽는 것이 끔찍하며 동일한 패턴으로 미리보기와 lookbehind가 모두 필요하지 않은 경우에만 작동합니다.

+1

남자, 당신은 JS에 대해 잘못이다. ''시작하기 - 이것은 내 문자열입니다 - ". match (/^starting - ([^ -] *) - /)'를 고려하십시오. – twil

+0

@ twil : 나는 이것을 고려해 거부했다. 이유에 대한 업데이트 된 답변을 읽을 수있다. 구체적으로, 당신의 방법을 사용하여 "horse", "eat", "hay", "for", "breakfast"를 나의 예제에서 일치 시키십시오. – Amadan

+0

귀하의 대답은 좋지만 한 가지 문제를 다른 것으로 대체하고 묻는 질문에 대해 잘못된 설명을하고 있습니다. – twil

0

예. 이것을 사용하십시오 :

(?<=textyouwanttomatchafter).* 

이 예제는 java에서 작동하며 다른 언어로도 유사해야합니다.

1

사용하는 언어를 알려 주시면 도움이됩니다. Perl의 경우 다음과 같이 작동합니다.

/starting-([^-]+)-/ 

문자열이 $ 1에 저장됩니다. 한 - 라이너 : 여기

$ perl -le '"starting-this is my string-" =~ m/starting-([^-]+)-/; print $1;' 
this is my string 

an example in JavaScript입니다 :

(function() { 
    var str = 'starting-this is my string-'; 
    var matches = str.match(/starting-([^-]+)-/); 
    alert(matches[1]); 
})(); 
+0

이것은 "this is my string"보다 더 광범위하게 일치합니다. – Amadan

+1

@Amadan, 이것은 물어 본 것과 일치합니다 - 하이픈 사이의 값 – twil

+0

이것은 * 질문 된 내용을 캡처합니다. * 더 광범위하게 * 일치합니다. 두 가지가 서로 바뀔 수없는 예를 보려면 내 대답을 참조하십시오. – Amadan

0

당신은 그룹을 캡처하는이 하나를 사용할 수 있습니다

starting\-(.*?)\- 

경기는 두 번째 그룹에있을 것입니다.

당신은 일치 하나를 사용할 수 있습니다

(?<=starting-).*(?=-) 
+0

이것은 "this is my string"보다 더 광범위하게 일치합니다. – Amadan

+0

일치하는 그룹을 사용합니다. – Szymon

+0

* * "시작 - this is my string-"과 일치합니다. 그것은 * "this is my string"을 캡처합니다. 내가 지적한 차이가 있습니다. 단일 값을 추출하기 만하면 대개 충분합니다. 내 대답이 그렇지 않은 상황을보십시오. – Amadan