2015-01-09 22 views
1

我困在一个固执的问题,我似乎无法解决。正则表达式php在html标签中找到一个字符

我试图找到一个特定的字符,只有当它在一个HTML标记(不在)之内。

为了验证这一点,我有2个测试字符串:

  1. 没有HTML的字符串。这是句子2.
  2. 一个字符串一些 HTML。 this is <a href="www.somesite.com">sentence</a>

我想找到内<> HTML标签的所有字符段,所以比赛应该在www.somesite.com 2期,我不能正确地得到匹配。有人可以看看我的正则表达式,看看我失踪了吗?

(<[^>]*>?(\.))>? 
+5

使用DOM解析器和检查元素的属性,不用正则表达式解析HTML。 – Sammitch 2015-01-09 22:44:31

+0

这看起来不像格式正确的正则表达式模式,您使用的是什么功能? – 2015-01-09 22:44:36

+0

即使您在html标签中匹配一段时间,您可能从中获得哪些信息?也许它不止一段时间。鉴于此,你必须分两步来完成。首先,捕获标签的内容(包含需要找到的内容),然后分别解析内容。 – sln 2015-01-10 00:02:43

回答

0

鉴于字符串“This is <a href="www.somesite.com">sentence</a> I want to test.”正则表达式:

\.(?=\w) 

将匹配在URL的时期,但不是在句末。 注意正则表达式不是URL特定的,它只是找到一个句点,后面紧跟着一个使用了积极向前的单词字符。

说了这么多,你真的应该解析HTML的东西,如PHPDomDocument

+0

您的正则表达式'\。(?= \ w)它们是否在HTML标签中。例如:“我的钱包中有$ 5.00”即使没有HTML,也会匹配。 – 2015-01-09 23:03:38

+0

我指出@Llama先生 – 2015-01-12 12:59:17

1

试试这个:

$re = "/>[^<]*<(*SKIP)(*F)|searchText/mi"; //before | part avoid tag inner text and after | part search only tag inside text. 
$str = "<div><a href=\"www.searchText.com\">This is <a href=\"www.searchText.com\">sentence</a> tI want to test.</a></div>"; 

preg_match_all($re, $str, $matches); 

Demo

+0

可能是最接近正则表达式的人。太糟糕了,我自己的HTML会打破这个,因为我不会'''作为'>';) – 2015-01-10 09:24:50

相关问题