我在PHP 5.6中使用preg_match从字符串中检索值。(我是preg_match的新手)
它具有以下格式:
数据[SearchForm] [此处有些字符串]
而且我需要能够检索“ somestringhere”值。
我尝试过这种方式:
$search_field_pattern = "/\bdata[SearchForm][[a-zA-Z]]\b/i";
if(preg_match($search_field_pattern, "foo")) {
debug('foobar!');
}
但这不起作用。有人可以给我提示为什么它不起作用以及我应该怎么做才能正确地解决此问题吗?
谢谢。
您可以使用
$search_field_pattern = "/\bdata\[SearchForm]\[(\w+)]/i";
if(preg_match($search_field_pattern, "data[SearchForm][somestringhere]", $m)) {
echo $m[1]; // => somestringhere
}
参见PHP演示
模式匹配
\b
-单词边界data\[SearchForm]\[
-文字字符串data[SearchForm][
(注释[
转义以匹配文字[
字符)(\w+)
-捕获第1组:一个或多个单词字符]
-一个]
字符第三个参数preg_match
,$m
将持有的结果。由于必需的子字符串已捕获到组1中,因此使用检索了该值$m[1]
。
if(preg_match("~\[(\w+)](?!.*\[\w+])~s", "data[SearchForm][somestringhere]", $m)) {
echo $m[1]; // => somestringhere
}
请参阅此PHP演示。
要获得第二个,使用
if(preg_match("~\[\w+].*?\[(\w+)]~s", "data[SearchForm][somestringhere]", $m)) {
echo $m[1]; // => somestringhere
}
参见另一个PHP演示。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句