我正在将preg_match与PHP 5.6结合使用,以从字符串中检索值。 (我是preg_match的新手)
它具有以下格式:
数据[SearchForm] [此处是一些字符串]
我需要能够检索“ somestringhere”值。
我尝试过这种方式:
$search_field_pattern = "/\bdata[SearchForm][[a-zA-Z]]\b/i";
if(preg_match($search_field_pattern, "foo")) {
debug('foobar!');
}
但是它不起作用。 有人可以给我提示为什么它不起作用以及我应该怎么做才能正确地解决此问题吗?
谢谢。
答案 0 :(得分:1)
您可以使用
$search_field_pattern = "/\bdata\[SearchForm]\[(\w+)]/i";
if(preg_match($search_field_pattern, "data[SearchForm][somestringhere]", $m)) {
echo $m[1]; // => somestringhere
}
请参见PHP demo
模式匹配
\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
}
请参见this PHP demo。
要获取第二个,请使用
if(preg_match("~\[\w+].*?\[(\w+)]~s", "data[SearchForm][somestringhere]", $m)) {
echo $m[1]; // => somestringhere
}