我正在处理正则表达式,我有这段代码:
$find = "/jsfile\.js?[0-9]*</";
$switch = 'jsfile.js?version=' . $version . '<';
$replace = preg_replace($find, $switch, $data);
我的问题是我的JavaScript文件现在有?version=<number>
。现在,如果我再次运行此脚本,它将会中断。
在我的$find
字符串?version=
可能会有或可能不存在的情况下,有没有办法说使用正则表达式?
答案 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);