PHP 正则表达式 : match character set OR end of string

标签 php regex

我正在将代码从 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/

相关文章:

python - 正则表达式:从字符串列表创建字典

php - 记录不更新

php - 尝试在 header.php 中使用样式表的绝对路径 - 不起作用

php - TCPDF 内联与保存到文件的图像质量

php - 为什么我的 SQL "INSERT INTO"查询不起作用?

php - 如何使用 Restkit 0.10.0 中的 loadObjectsAtResourcePath 将 http 发布到 php 脚本?

php - 具有双重否定匹配的正则表达式

regex - 如何打印在 TCL 变量中多次出现的单词(URL 名称)?

Vim中的正则表达式-在编号行之前插入空行

regex - Grep 中间的通配符