PHP正则表达式:匹配字符集或字符串的结束


PHP Regex: match character set OR end of string

我正在将代码从Node.js移植到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)) { 
        // ... 
    }
?>

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等情况,其中开始大括号与结束大括号匹配:)

先修复正则表达式:

^/[a-z0-9]{6}([^0-9a-z]|$)

试试这个。

正如其他人指出的那样,我是个白痴,把/看作'…LOL .

好,我们再来一次,

我会避免使用"|"就这样做。

if (preg_match('/^'/[a-z0-9]{6}([^0-9a-z]|$)/', $sUrl)) { ... }

将其简化为仅匹配特定字符或字符串结束(PHP),

'D777('D|$)'

这将匹配:

xxx777xxx or xxx777 but not xxx7777 or xxx7777xxx