0

我有以下代码。我正在尝试将所有内容都放在“a”标签中。目前它正在工作。我得到“第一”和“第二”作为输出。打开“a”标签和关闭“a”标签在同一行。

$v = 'this is test 
<a href="products.html">first</a> 
<a>second</a;
preg_match_all("#<a\b[^>]*>(.*?)</a>#", $v, $foo);
echo implode("\n", $foo[1]);

但是如果我这样写,

$v = '<a href="products.html">first
</a> 
preg_match_all("#<a\b[^>]*>(.*?)</a>#", $v, $foo);
echo implode("\n", $foo[1])';

在这里,我将结束的“a”标签移到了第二行,现在它没有给我任何输出。有谁知道如何使它工作?

4

1 回答 1

1

至于您遇到的问题,是因为您需要启用单行选项(s):

preg_match_all("#<a\b[^>]*>(.*?)</a>#s", $v, $foo);

否则.不匹配换行符。

文档中的选项说明:

如果设置了此修饰符,则模式中的点元字符匹配所有字符,包括换行符。没有它,换行符被排除在外。

但是你最好不要使用正则表达式。 有关 PHP 中的其他方法,请参阅此问题

于 2013-02-20T14:17:07.363 回答