我正在将代码从 Node.js 移植到 PHP,并不断收到此正则表达式的错误:
^/[a-z0-9]{6}([^0-9a-z]|$)
PHP 提示美元符号:
Unknown modifier '$'
在 JavaScript 中,我能够检查字符串是否以 [^0-9a-z]
或 END OF STRING
结尾。
我如何在 PHP 中使用 preg_match() 执行此操作? ?
我的 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)) {
// ...
}
最佳答案
要匹配以斜杠开头,后跟六个字母数字,然后是字符串结尾或非字母数字的字符串:
preg_match('~^/[a-z0-9]{6}([^0-9a-z]|$)~i', $str);
原来的JavaScript大概用到了new RegExp(<expression>)
, 但是 PCRE需要适本地包含表达式;这些是 ~
我在上面的代码中输入的字符。顺便说一句,我使用 i
使表达式不区分大小写修改器;如果不需要,请随时将其删除。
您使用的是 |
作为外壳;因此,您应该对表达式内部 的竖线字符进行转义,但这样做会改变意思。通常最好选择在表达式中没有特殊含义的定界符;它也有助于选择不在表达式中出现的定界符,例如,我选择的 ~
避免必须转义任何字符。
PCRE 中的表达式可以概括为:
<start-delimiter> stuff <end-delimiter> modifiers
通常,起始分隔符与结束分隔符相同,但类似 [expression]i
的情况除外。或 {expression}i
由此左大括号与右大括号匹配 :)
关于PHP 正则表达式 : match character set OR end of string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24624162/