我正在将代码从Nodejs移植到PHP并继续使用这个正则表达式出错:
^/[a-z0-9]{6}([^0-9a-z]|$)
PHP抱怨美元符号:
未知修饰符'$'
在javascript中,我能够检查字符串是否以[^0-9a-z]
或END OF STRING
结尾
如何在PHP中使用 preg_match ?
我的PHP代码如下所示:
<?
$sExpression = '^/[a-z0-9]{6}([^0-9a-z]|$)';
if (preg_match('|' . $sExpression . '|', $sUrl)) { ... }
?>
JS代码与此类似:
var sExpression = '^/[a-z0-9]{6}([^0-9a-z]|$)';
var oRegex = new RegExp(sExpression);
if (oRegex.test(sUrl)) { ... }
提前致谢。
答案 0 :(得分:5)
匹配以斜杠开头的字符串,后跟6个字母数字,然后是字符串结尾或不是字母数字的字符串:
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
之类的情况,其中左括号与右括号匹配:)
答案 1 :(得分:0)
你可以先修复regx吗?
^/[a-z0-9]{6}([^0-9a-z]|$)
试试这个
更新:正如其他人指出我和idot并且看到一个/作为一个\ ..大声笑
好的,再次去看看,
我要避免使用“|”并且就这样做。
if (preg_match('/^\/[a-z0-9]{6}([^0-9a-z]|$)/', $sUrl)) { ... }
答案 2 :(得分:0)
将其简化为仅匹配特定字符或字符串结尾(php)
\D777(\D|$)\
这将匹配
xxx777xxx or xxx777 but not xxx7777 or xxx7777xxx