【问题标题】:Regex php find a character within html tag正则表达式 php 在 html 标记中找到一个字符
【发布时间】:2015-01-10 17:14:02
【问题描述】:

我陷入了一个似乎无法解决的顽固问题。

我试图仅在某个特定字符位于 html 标记内(而不是介于两者之间)时才找到它。

为了测试这个,我有 2 个测试字符串:

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

我想在 html 标记中查找所有句点字符,因此匹配应该是 www.somesite.com 中的 2 个句点,我无法正确匹配。有人可以看看我的正则表达式,看看我缺少什么吗?

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

【问题讨论】:

  • 使用 dom 解析器并检查元素属性,不要使用正则表达式解析 HTML。
  • 这看起来不像是格式正确的正则表达式模式,您使用的是什么函数?
  • 即使你匹配了一个html标签中的句点,你还能从中得到什么信息?也许它不止一个时期。鉴于此,您必须分两步执行此操作。首先,捕获标签的内容(包含需要找到的内容),然后分别解析内容。
  • 试试&lt;([^&gt;]*\.[^&gt;]*)&gt;,然后在.上分1美元

标签: php regex


【解决方案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

【讨论】:

  • 可能是最接近正则表达式的结果。太糟糕了,我自己的 HTML 会破坏它,因为我没有将 &amp;gt; 转义为 &amp;gt; ;)
【解决方案2】:

给定字符串“This is &lt;a href="www.somesite.com"&gt;sentence&lt;/a&gt; I want to test.”正则表达式:

\.(?=\w)

将匹配 URL 中的句点,但不匹配句尾。 注意 正则表达式不是特定于 URL 的,它只是使用正向前瞻来查找紧跟单词字符的句点。

话虽如此,您确实应该使用 PHPDomDocument 之类的东西来解析 HTML

【讨论】:

  • 您的正则表达式 \.(?=\w) 将匹配事物,无论它们是否在 HTML 标记中。例如:I have $5.00 in my wallet 将被匹配,即使它没有 HTML。
猜你喜欢
  • 1970-01-01
  • 2010-12-10
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-31
  • 1970-01-01
相关资源
最近更新 更多