在 PHP 正则表达式中引用报价

Escping quotes in PHP regex

提问人:John 提问时间:3/6/2021 最后编辑:TomJohn 更新时间:3/6/2021 访问量:52

问:

如何在以下字符串 ($x) 中仅找到电话号码 (1234827382)?

重要:我在 $x(文本)上使用了 htmlspecialchars() 函数。如果不使用此函数,正则表达式将起作用。当我在正则表达式之前使用 htmlspecialchars() 时,我需要找到一个正则表达式解决方案。

 font-size: 14px; color: #333;" >asd:</td> <td width="150" align="left" valign="top"
    bgcolor="#f5f5f5" style="padding: 6px; border: 1px solid
    #eaeaea;font-family: Arial, Helvetica, sans-serif; font-size: 14px; color:
    #333;" >Tel:</td> <td align="left" valign="top" style="padding: 6px;
    border: 1px solid #eaeaea;font-family: Arial, Helvetica, sans-serif;
    font-size: 14px; color: #333;" ><a href="tel:1234827382">1234827382</a></td> </tr>
<tr> <td width="150" align="left"

我试过:

$p = '/href="tel:12.{20}/';
preg_match_all($p, $x, $matchestel);
print_r($matchestel);

如果我尝试用 \ 转义,那么它也不起作用:

$p = '/href=\"tel:12.{20}/';

如果文本不包含引号: <a href=tel:1234827382“ (而不是这个: <a href=”tel:1234827382“ ) 然后它找到,之后我可以从一开始就删除 href”。我知道这不是最好的解决方案。 我认为问题是我需要逃避“ from 模式。

PHP 正则表达式 报价

评论

0赞 Syscall 3/6/2021
您没有捕获组:例如:(demo)。但是使用XML解析器应该更准确。()'/href="tel:([0-9]+)"/'
0赞 Wiktor Stribiżew 3/6/2021
不,在正则表达式替换后使用。htmlspecialchars

答:

0赞 Petr Hejda 3/6/2021 #1

您需要使用反斜杠对引号进行转义。

就您而言/href=\"tel:12.{20}/

编辑:如果使用 ,引号将变为 ,因此您需要将正则表达式更新为htmlspecialchars($x)"&quot;/href=&quot;tel:12.{20}/

评论

0赞 John 3/6/2021
这是我首先尝试的,但没有奏效
0赞 Petr Hejda 3/6/2021
查看 sandbox.onlinephpfunctions.com/code/ 的输出... ...它在这里返回子字符串,所以我的猜测是问题出在代码的其他部分。
0赞 John 3/6/2021
是的,您的代码运行良好。我忘了提到我在$x上使用了htmlspecialchars sandbox.onlinephpfunctions.com/code/
0赞 Petr Hejda 3/6/2021
@John 这是重要的信息。好的,更新了我的答案。
0赞 Carlos Condore 3/6/2021 #2

如果您的情况是数字没有任何特殊字符,您可以使用以下命令:

$p = '/\d{10}/';
preg_match_all($p, $x, $matchestel);
print_r($matchestel);