preg_match를 사용하여 다른 문이없는 경우 하나의 문을 캡처하는 방법을 알아 내려고합니다.PHP 정규식, 대체 문에서 첫 번째 그룹화를 무시하십시오.
샘플 텍스트 :
<!-- InstanceBeginEditable name="doctitle" -->
<title>BU Libraries | Research Guides | Citing Your Sources</title>
<!-- InstanceEndEditable -->
<div id="standardpgt"><h1><!-- InstanceBeginEditable name="pagetitle" --><strong>Citing Your Sources</strong><!-- InstanceEndEditable --></h1></div>
PAGETITLE 내가 doctitle 태그 대신 당겨 할 존재 때문입니다. 물론 그들 사이에는 수많은 다른 문자가 있지만 작은 샘플을 보여주고 싶었습니다.
pagetitle이 없으면 doctitle의 콘텐츠를 가져오고 싶습니다.
PHP 코드를 직접 사용하지 않고 구성 파일을 통해 정규식 문을 전달하면 스크립트가이를 받아 들여 첫 번째 그룹을 명령문에서 꺼냅니다. 그것이 작동하지 않은 경우
문제가 어떤 이유로 PHP를 위해 무엇((?!.*?<!--\s*?InstanceBeginEditable\s*?name=\x22pagetitle\x22\s*?-->.*?<!--\s*?InstanceEndEditable\s*?-->)<!--\s*?InstanceBeginEditable\s*?name=\x22doctitle\x22\s*?-->\s*?<title>(.*?)<\/title>\s*?<!--\s*?InstanceEndEditable\s*?-->|<!-- InstanceBeginEditable\s*?name=\x22pagetitle\x22\s*?-->(.*?)<!--\s*?InstanceEndEditable\s*?-->)
항상 1 군으로 첫 번째 빈 그룹을 읽
이 내가 생각 해낸 것입니다.
0 -> <!-- InstanceBeginEditable name="pagetitle" --><strong>Citing Your Sources</strong><!-- InstanceEndEditable -->
1 ->
2 -> <strong>Citing Your Sources</strong>
을 반환 위의 샘플 텍스트의 예를 들어 내가 할 수없는이 일을하는 방법을 알아낼의 생활. 나는 또한이 정규 표현식을 썼다 :
(?(?=.*?<!--\s*?InstanceBeginEditable\s*?name=\x22pagetitle\x22\s*?-->.*?<!--\s*?InstanceEndEditable\s*?-->).*?<!-- InstanceBeginEditable\s*?name=\x22pagetitle\x22\s*?-->(.*?)<!--\s*?InstanceEndEditable\s*?-->|.*?<!--\s*?InstanceBeginEditable\s*?name=\x22doctitle\x22\s*?-->\s*?<title>(.*?)<\/title>\s*?<!--\s*?InstanceEndEditable\s*?-->)
그러나 그것은 역시 작동하지 않았다. 도움을 주셔서 대단히 감사합니다.
크리스
이것은 부수적으로 왜 [regexes로 HTML을 구문 분석하지 않아야하는지]입니다 (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags)./1732454 # 1732454). 광기 외에 더 좋은 방법이 있습니다. 대신 정규식을 사용하는 시스템을 수정할 수 있습니까? 왜냐하면 심하게, 광기 때문에 ... – Charles
편안한 의자를 찾아 랩톱을 꺼내서 [PHP DOMDocument] (http://www.php.net/manual/en/book.dom.php). –
하나의 정규 표현식으로 사용하지 마십시오. – mhitza