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

原文 标签 php regex

我正在将代码从nodejs移植到php,并使用以下正则表达式不断获取错误:
< >
php抱怨美元符号:
未知修饰符“$”
在JavaScript中,我能够检查一个字符串是否以^/[a-z0-9]{6}([^0-9a-z]|$)[^0-9a-z]结尾。
如何在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)) { ... }

提前谢谢。

最佳答案

要匹配以斜线开头、后跟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这样的情况,即左大括号与右大括号匹配:)

相关文章:

php - laravel挂钩进入Eloquent前后保存为每个模型

php - 双下拉列表值

php - 如何使用$ .each函数接收两位数而不是一位数

javascript - 在另一个页面中显示2个下拉菜单中的条目

java - 正则表达式对Android(Java)代码的怀疑

ruby - 将字符串拆分为最大字符数的块,而不会打断单词

javascript - 防止价值被插入?

javascript - 正则表达式:如果不带单词则匹配短语

javascript - 在背景图片中使用正则表达式获取div

php - 无法输出个人资料页面的缩略图