preg_match link 包含小于号的文本
preg_match link text with less-than sign in it
我试图从 html 个文件中获取数据库中的信息,突然发现 link 可以是这样的:
<a href="/blabla/12345678" class="someclass">channel crosstalk: <60dB</a>
我的正则表达式没有找到 link:
preg_match_all('|<a href="/blabla/([0-9]+)"[^>]*>([^<]*)</a>|Uis',$html,$matches);
这是大正则表达式的一部分,我只是简化了例子。
这是尝试使用正则表达式的根本问题 HTML。这不是很好 HTML - 因为不应被解释为 HTML 的内容应该是 html 实体(又名 <e;
而不是 <
)。不过,您并不总是能够处理这些问题。
在你的例子中,类似这样的东西适用于正则表达式:
|<a href="/blabla/([0-9]+)">.*?</a>|Uis
匹配组移动。这也允许嵌套标签(如 <a><b><i></i></b></a>
)。
请记住,您使用的 Ungreedy 标签意味着您可以在正则表达式匹配中放宽一些。如果您想在没有 U
修饰符的情况下执行此操作,您可能需要做一些负面的前瞻。
|<a href="/blabla/([0-9]+)">(?:(?!</a>).)*</a>|is
很难说出您要拉动什么。您要查找整个 link 吗?或者你想从 link 中获取零件(因此有括号)?这是获取 link 中各个内容的解决方案:
preg_match_all( '#<a href="/.*?/(\d+)" class="(.*?)">(.*?)</a>#i', $html, $matches);
匹配的第一个元素将是整个link,而其他元素将是子部分。
或者这里是整个 link:
preg_match_all( "#(<a.*>.*</a>)#i", $html, $matches );
或者这里是你的一个稍微修改过的版本,目前不匹配,因为它说要匹配开始和结束 A 标签内不是尖括号的任何内容,因为它的内容有一个尖括号:
preg_match_all( '|<a href="/blabla/([0-9]+)"[^>]*>(.*?)</a>|Uis', $html, $matches );
同样,不能 100% 确定您正在寻找的确切结果,但也许这会让您继续前进,您可以根据需要进行修改。
您可以使用此正则表达式提取 href 和 link text.
<a[^>]+?href="(.*?)"[^>]+?>(.*?)</a>
Group 1
: href
Group 2
: link 文字
我试图从 html 个文件中获取数据库中的信息,突然发现 link 可以是这样的:
<a href="/blabla/12345678" class="someclass">channel crosstalk: <60dB</a>
我的正则表达式没有找到 link:
preg_match_all('|<a href="/blabla/([0-9]+)"[^>]*>([^<]*)</a>|Uis',$html,$matches);
这是大正则表达式的一部分,我只是简化了例子。
这是尝试使用正则表达式的根本问题 HTML。这不是很好 HTML - 因为不应被解释为 HTML 的内容应该是 html 实体(又名 <e;
而不是 <
)。不过,您并不总是能够处理这些问题。
在你的例子中,类似这样的东西适用于正则表达式:
|<a href="/blabla/([0-9]+)">.*?</a>|Uis
匹配组移动。这也允许嵌套标签(如 <a><b><i></i></b></a>
)。
请记住,您使用的 Ungreedy 标签意味着您可以在正则表达式匹配中放宽一些。如果您想在没有 U
修饰符的情况下执行此操作,您可能需要做一些负面的前瞻。
|<a href="/blabla/([0-9]+)">(?:(?!</a>).)*</a>|is
很难说出您要拉动什么。您要查找整个 link 吗?或者你想从 link 中获取零件(因此有括号)?这是获取 link 中各个内容的解决方案:
preg_match_all( '#<a href="/.*?/(\d+)" class="(.*?)">(.*?)</a>#i', $html, $matches);
匹配的第一个元素将是整个link,而其他元素将是子部分。
或者这里是整个 link:
preg_match_all( "#(<a.*>.*</a>)#i", $html, $matches );
或者这里是你的一个稍微修改过的版本,目前不匹配,因为它说要匹配开始和结束 A 标签内不是尖括号的任何内容,因为它的内容有一个尖括号:
preg_match_all( '|<a href="/blabla/([0-9]+)"[^>]*>(.*?)</a>|Uis', $html, $matches );
同样,不能 100% 确定您正在寻找的确切结果,但也许这会让您继续前进,您可以根据需要进行修改。
您可以使用此正则表达式提取 href 和 link text.
<a[^>]+?href="(.*?)"[^>]+?>(.*?)</a>
Group 1
: href
Group 2
: link 文字