regex PHP正则表达式:匹配字符集或字符串结尾

n53p2ov0  于 2023-01-06  发布在  PHP
关注(0)|答案(3)|浏览(200)

我正在将代码从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)) { 
    // ... 
}
ujv3wf0j

ujv3wf0j1#

要匹配以斜杠开头、后跟六个字母数字、然后后跟字符串结尾或其他非字母数字字符的字符串:

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等情况除外,在这些情况下,左大括号与右大括号匹配:)

hxzsmxv2

hxzsmxv22#

首先修复正则表达式:

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

试试这个。
正如其他人指出的,我是一个白痴,看到了/作为\ ...哈哈。
好吧,我们再来一次,
我会避免使用"| "就这样做。

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

yhxst69z3#

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

\D777(\D|$)\

这将匹配:

xxx777xxx or xxx777 but not xxx7777 or xxx7777xxx

相关问题