以 < and > 开头和结尾的 PHP 正则表达式会产生未知修饰符警告

问题描述 投票:0回答:2

我得到了一堆包含 ID 的 XML 文件。例如

<WINE_PRODUCER>9456</WINE_PRODUCER>

我需要检查一下,例如哪个文件包含 WINE_PRODUCER id=9456:

$content = file_get_contents("my.xml");
$Num = 9456;
$pattern = "<WINE_PRODUCER>$Num<\/WINE_PRODUCER>";
$res = preg_match("$pattern", $content);

我收到错误 PHP 警告:

preg_match(): Unknown modifier '9'

基本上它不喜欢图案中的数字。

我该怎么办?谷歌搜索了很多,但都导致匹配一组数字......

PS:由于性能原因,我不想在这种情况下使用 DOM xml 解析器。

php regex validation pattern-matching
2个回答
1
投票

如果您总是需要匹配固定数字,您只需执行

strstr
即可。

$num = 9456;
$find = "<WINE_PRODUCER>". $num . "</WINE_PRODUCER>";
$found = strstr($content, $find) !== false;

要修复正则表达式,您需要指定分隔符:

$pattern = "@<WINE_PRODUCER>$Num<\/WINE_PRODUCER>@";

应该可以,但你可能不需要正则表达式。


1
投票

尝试:

$pattern = sprintf(preg_quote('<WINE_PRODUCER>%s<\/WINE_PRODUCER>'), $num);

echo '/'.$pattern.'/';
© www.soinside.com 2019 - 2024. All rights reserved.