use*_*363 71 php regex preg-match
我有这个代码:
$string1 = "My name is 'Kate' and im fine";
$pattern = "My name is '(.*)' and im fine";
preg_match($pattern , $string1, $matches);
echo $matches[1];
Run Code Online (Sandbox Code Playgroud)
当我运行它时会返回此错误:
警告:preg_match()[function.preg-match]:分隔符不能是字母数字或反斜杠
Pau*_*aul 118
你需要一个模式的分隔符.它应该添加在模式的开头和结尾,如下所示:
$pattern = "/My name is '(.*)' and im fine/"; // With / as a delimeter
Run Code Online (Sandbox Code Playgroud)
ico*_*ast 61
解决方案(其他答案没有提及 - 至少在我最初写这篇文章时)是当PHP引用分隔符时,它不是指您在代码中看到的分隔符(引号),而是下一个分隔符.字符串中的字符.(事实上,我从未在任何文档中看到过这种说法:你必须在示例中看到它.)因此,不要像许多其他语言那样习惯于正则表达式语法:
/something/
Run Code Online (Sandbox Code Playgroud)
PHP使用字符串,然后在字符串中查找另一个分隔符:
'/something/'
Run Code Online (Sandbox Code Playgroud)
PHP所指的分隔符是一对/字符,而不是一对'字符.因此,如果您编写'something',PHP将s作为预期的分隔符并抱怨您不允许使用字母数字字符作为分隔符.
因此,如果您想传递(例如)一个i以显示您想要一个不区分大小写的匹配,则将其传递给字符串但在正则表达式分隔符之外:
'/something/i'
Run Code Online (Sandbox Code Playgroud)
如果你想使用除/分隔符之外的其他东西,你可以,例如,如果你匹配一个URL,并且不想要逃避所有斜杠:
'~something~'
Run Code Online (Sandbox Code Playgroud)
Ben*_*rne 20
您必须为表达式指定分隔符.分隔符是在表达式的开头和结尾使用的特殊字符,用于表示哪个部分是表达式.这允许您使用修饰符和解释器来知道哪个是表达式,哪个是修饰符.正如错误消息所述,分隔符不能是反斜杠,因为反斜杠是转义字符.
$pattern = "/My name is '(.*)' and im fine/";
Run Code Online (Sandbox Code Playgroud)
并且在相同的示例下面,但使用i修饰符进行匹配而不区分大小写.
$pattern = "/My name is '(.*)' and im fine/i";
Run Code Online (Sandbox Code Playgroud)
如您所见,i它位于斜杠之外,因此被解释为修饰符.
还要记住,如果使用正斜杠字符(/)作为分隔符,则必须在正则表达式中进一步使用/(如果存在).
该模式必须具有分隔符.分隔符可以是正斜杠(/)或任何非字母数字字符(#,$,*,...).例子
$pattern = "/My name is '(.*)' and im fine/";
$pattern = "#My name is '(.*)' and im fine#";
$pattern = "@My name is '(.*)' and im fine@";
Run Code Online (Sandbox Code Playgroud)