分隔符不得为字母数字或反斜杠,preg_match

2022-08-30 07:34:22

我有这个代码:

$string1 = "My name is 'Kate' and im fine"; 
$pattern = "My name is '(.*)' and im fine"; 
preg_match($pattern , $string1, $matches);
echo $matches[1];

当 im 运行时,它将返回此错误:

警告:preg_match() [function.preg-match]:分隔符不得为字母数字或反斜杠


答案 1

您需要为模式设置分隔符。它应该被添加到模式的开头和结尾,如下所示:

$pattern = "/My name is '(.*)' and im fine/";  // With / as a delimeter 

答案 2

解决方案(其他答案没有提到 - 至少在我最初写这篇文章的时候)是,当PHP引用分隔符时,它不是指你在代码中看到的分隔符(引号),而是字符串中的下一个字符。(事实上,我从未在任何文档中看到过这种说法:你必须在示例中看到它。因此,与其使用像许多其他语言那样的正则表达式语法,不如使用正则表达式语法:

/something/

PHP 使用字符串,然后在字符串内部查找另一个分隔符:

'/something/'

PHP所指的分隔符是一对字符,而不是一对字符。因此,如果您编写,PHP将作为预期的分隔符,并抱怨您不允许使用字母数字字符作为分隔符。/''something's

因此,如果您想传递(例如)一个以表明您想要不区分大小写的匹配,则可以在字符串内部但在正则表达式分隔符之外传递它:i

'/something/i'

如果要使用分隔符以外的其他内容,则可以这样做,例如,如果您要匹配 URL 并且不想转义所有斜杠:/

'~something~'

推荐