2012-04-19 2 views
4

PHP preg_match_all과 REGEX 질문이 있습니다.따옴표 안에 이스케이프 된 따옴표가있는 REGEX 사용

나는 다음과 같은 코드가 있습니다 : 픽업하지 않는 것

<?php 

$string= 'attribute1="some_value" attribute2="<h1 class=\"title\">Blahhhh</h1>"'; 

preg_match_all('/(.*?)\s*=\s*(\'|"|&#?\w+;)(.*?)\2/s', trim($string), $matches); 

print_r($matches); 

?> 

내가 따옴표와 함께 HTML에 전달하려는 인스턴스에 대한 따옴표를 탈출했다. REGEX fixes 따옴표 안의 기본 따옴표로 여러 가지 해결책을 시도했지만 아무 것도 나를 위해 작동하지 않는 것 같습니다. 이 기존의 REGEX 안에 제대로 배치 할 수 없습니다.

나는 REGEX 마스터가 아니므로 누군가 올바른 방향으로 나를 가리 키길 바랍니다.

Array 
(
    [0] => Array 
     (
      [0] => attribute1="some_value" 
      [1] => attribute2="<h1 class=\"title\">Blahhhh</h1>" 
     ) 

    [1] => Array 
     (
      [0] => attribute1 
      [1] => attribute2 
     ) 

    [2] => Array 
     (
      [0] => " 
      [1] => " 
     ) 

    [3] => Array 
     (
      [0] => some_value 
      [1] => <h1 class=\"title\">Blahhhh</h1> 
     ) 
) 

감사 :

내가 달성하기 위해 노력하고 결과는 이것이다.

+1

이 코드에서 정확히 무엇을 하려는지 알 수 있습니까? – anubhava

+0

무엇을 하시겠습니까? –

답변

1

당신은 negative lookbehind assertion와 함께이 문제를 해결 할 수 있습니다

'/(.*?)\s*=\s*(\'|"|&#?\w+;)(.*?)(?<!\\\\)\2~/' 
           ^^^^^^^^^ 

는 닫는 따옴표는 \에 의해 앞에 추가 할 수 없습니다. 저를 제공합니다 :

Array 
(
    [0] => Array 
     (
      [0] => attribute1="some_value" 
      [1] => attribute2="<h1 class=\"title\">Blahhhh</h1>" 
     ) 

    [1] => Array 
     (
      [0] => attribute1 
      [1] => attribute2 
     ) 

    [2] => Array 
     (
      [0] => " 
      [1] => " 
     ) 

    [3] => Array 
     (
      [0] => some_value 
      [1] => <h1 class=\"title\">Blahhhh</h1> 
     ) 
) 

이 정규식 때문에 엔티티 당신의 완벽하지 않지만 거기 구분 기호로, 따옴표처럼이 \으로도 탈출 할 수 있습니다. 그것이 정말로 의도 된 것인지 전혀 모른다.

이 위대한 질문/답변 : Split string by delimiter, but not if it is escaped도 참조하십시오.

+0

이 문자는 \ n 문자로도 잘 작동합니다. 위대한 답변 Hakre 주셔서 감사합니다! – cmfolio

관련 문제