2017-03-07 2 views
1

이 정규식에 문제가 있습니다. (https://regex101.com/r/vQLlyY/1)preg_match 슬래시가 변수에 저장되어있는 패턴

내 패턴이 작동하고 있습니다 :

(?<=Property:)(.*?)(?= \(Contact)|(?<=Property:)(.*?)(?= -)

당신은 속성 텍스트가 모두 이러한 문자열에서 추출되는 링크에서 볼 수 있습니다 :에서

Property: This is the property (Contact - Warren) 
Property: This is another property - Warren 

내 이 패턴은 다음과 같이 저장됩니다.

$this->rex["property"][2] = '/(?<=Property:)(.*?)(?= \(Contact)|(?<=Property:)(.*?)(?= -)/s' 

는 다음에,이 같은 추출 :이 예에서

foreach ($this->rex as $key => $value) { 
    if (isset($value[$provider])) { 
     preg_match_all($value[$provider], $emailtext, $matches); 
     if (!empty($matches[1][0])) { 
      $emaildetails[$key] = trim(preg_replace("/\r|\n/", "", $matches[1][0])); 
     } else { 
      $emaildetails[$key] = ""; 
     } 
    } 
} 

, $ 제공자 = 2

내가 픽업 (Contact이 코드를 얻을 수 없기 때문에 내 문제는 내가 확신은 역 슬래시 함께 브래킷을 벗어날 필요가있는 부분의 패턴. 나는 다른 많은 패턴을 사용하고 있기 때문에 코드가 작동한다는 것을 알고있다. 나는 탈출 브래킷 제대로 패턴을 저장하고, 그래서

$this->rex["property"][2] = '/(?<=Property:)(.*?)(?= -)/s

을, 심지어는 내 문제가 있다는 것입니다 : 패턴이 다음과 같이 저장되어있는 경우이이 건물의 텍스트를 작동? 미리 감사드립니다!

+0

"연락처"를 캡처하거나 일치시키기 위해 사용하려는 경우 명확하게 설명 할 수 있습니까? –

+0

그냥 일치 - 나는 속성을 따라'(Contact')를 가질 것이다. – Warren

+0

죄송합니다. 찾고있는 최종 결과를 이해하려고합니다.이 편집기에서 예제 코드를 래핑했습니다 : http : //sandbox.onlinephpfunctions. com/code/6a566fb5a0c6789d75a5fca24e4a6518cb1af561. print_r을 출력 할 때 예상되는 답변으로 업데이트하십시오. –

답변

0

별도의 캡처 그룹을 사용하기 때문에 다른 경로가 다른 일치 색인으로 끝납니다. 예를 들어 첫 번째 줄 (Contact - Warren)은 일치 결과를 인덱스 1에 저장합니다. 두 번째 줄에는 인덱스 1에 빈 문자열이 있고 인덱스 2에서 찾고있는 일치 결과가 저장됩니다.

해결하려면 이 문제는 비 캡처 그룹을 사용하거나 표현식을 다시 작성하여 긍정적 인 미리보기를 사용할 수 있습니다. 전자의 이점은 한정 기호를 허용하는 것을 포함합니다. 후자의 이점은 전체 경기 결과가 0 경기 결과로 끝나지 않는 것을 포함합니다.

비 포획 그룹의 예 : https://regex101.com/r/vQLlyY/2.

긍정적 인 lookahead의 예 : (?<=Property:)(.*?)(?= \(Contact| -)https://regex101.com/r/vQLlyY/3.

+0

링크 대신 코드를 삽입하십시오. 링크가 끊어지면이 답변은 쓸모 없게됩니다! – Toto

+0

사과드립니다. –