我正在研究正则表达式,我想出了一些关于匹配一个或多个角色,但我有一个案例,但不知道如何解决这个问题。
例如我有:
$data = "bla bla -start- blu blu blu -end- bla bla";
$pattern = "/\-start\-[\w]\-end\- /";
preg_match($pattern, $data, $matches);
print_r($matches);
我打算在'-start-'和'-end-'之间取任何东西,所以我希望得到
'blu blu blu'。
有什么建议吗?
答案 0 :(得分:4)
\w
仅代表单词字符,您还需要允许空格。假设你真的想允许-start-
和-end-
之间的任何内容,你可以使用匹配任何字符的.
。
除非用字符图案(方括号[
和]
之间)括起来,否则不需要对连字符进行转义,因此您可以用\-
替换-
。
就像使用单个\w
表示匹配任何单个单词字符一样,.
表示匹配任何单个字符,因此您需要添加更多信息。使用+
中的任何一个表示匹配至少一个字符,或者使用*
表示零或更多字符。假设你想要至少一个角色,你的表达应该是这样的:
$pattern = "/-start-(.+)-end- /";
假设您可能遇到类似:-start- foo -end- -end-
的表达式,并且您希望在第一个-end-
(要提取的内容为foo
)上终止,那么您需要在非{ - 方式。默认情况下PHP的正则表达式是贪婪的,要关闭此功能,您可以使用+
关注*
(或?
},如下所示:
$pattern = "/-start-(.+?)-end- /";