PHP正则表达式,如果存在或不存在

时间:2013-05-10 19:16:54

标签: php regex

我正在处理正则表达式,我有这段代码:

 $find = "/jsfile\.js?[0-9]*</";
 $switch = 'jsfile.js?version=' . $version . '<';
 $replace = preg_replace($find, $switch, $data);

我的问题是我的JavaScript文件现在有?version=<number>。现在,如果我再次运行此脚本,它将会中断。

在我的$find字符串?version=可能会有或可能不存在的情况下,有没有办法说使用正则表达式?

4 个答案:

答案 0 :(得分:1)

使用可选的子模式:(?:version=)?

答案 1 :(得分:0)

$find = '/jsfile\.js\?(version=)?[0-9]*</';

这样的事情应该做..

答案 2 :(得分:0)

尝试以下方法:

$find = '/jsfile\.js\?(version=)?[0-9]*</';

?使前面的元素可选,括号创建一个组,因此(version=)?表示“可选地匹配version=”。请注意,我还从正则表达式中的?转义,因为您希望它与文字?匹配,而不是s可选。

此外,我从双引号转换为单引号以确保转义正常,如果您要使用双引号,则需要转义每个反斜杠,例如:

$find = "/jsfile\\.js\\?(version=)?[0-9]*</";

答案 3 :(得分:0)

您可以改用此模式:

$find = '~jsfile\.js\?\K(?>version=)?\d++(?=<)~';
$switch = 'version='. $version;
$replace = preg_replace($find, $switch, $data);