我正在将代码从Node.js移植到PHP,并且不断收到以下正则表达式的错误:
第一个月
PHP抱怨美元符号:
未知修饰符“$”
在JavaScript中,我可以检查字符串是否以[^0-9a-z]
或END OF STRING
结尾。
我的PHP代码如下所示:
<?
$sExpression = '^/[a-z0-9]{6}([^0-9a-z]|$)';
if (preg_match('|' . $sExpression . '|', $sUrl)) {
// ...
}
?>
JavaScript代码类似于以下代码:
var sExpression = '^/[a-z0-9]{6}([^0-9a-z]|$)';
var oRegex = new RegExp(sExpression);
if (oRegex.test(sUrl)) {
// ...
}
3条答案
按热度按时间ujv3wf0j1#
要匹配以斜杠开头、后跟六个字母数字、然后后跟字符串结尾或其他非字母数字字符的字符串:
最初的JavaScript可能使用
new RegExp(<expression>)
,但是PCRE需要表达式的适当封装;这些是我放在上面代码中的~
字符。顺便说一句,我通过使用i
修饰符使表达式不区分大小写;如果不需要,请随意将其移除。您使用
|
作为存储模块;因此,你应该转义表达式中的管道符 *,但是这样做会改变它的含义。通常最好选择在表达式中没有特殊含义的分隔符;选择表达式中不出现的分隔符也很有帮助,例如,我选择的~
避免了转义任何字符。PCRE中的表达可概括为:
通常,开始分隔符与结束分隔符相同,但
[expression]i
或{expression}i
等情况除外,在这些情况下,左大括号与右大括号匹配:)hxzsmxv22#
首先修复正则表达式:
试试这个。
正如其他人指出的,我是一个白痴,看到了
/
作为\
...哈哈。好吧,我们再来一次,
我会避免使用"| "就这样做。
yhxst69z3#
将其简化为仅匹配特定字符或字符串结尾(PHP),
这将匹配: