在字符串中查找模式

时间:2013-07-02 07:19:17

标签: php regex preg-match

我有一个这样的字符串:

{param1}{param2}{param3}....{myparam paramvalue}{paramn}

如何获得paramvalue

myparam

5 个答案:

答案 0 :(得分:2)

简单的正则表达式:

/\({[^ ]+?) ([^}]+?)\}/
  • {[^ ]+?) - 它会查找至少1次出现但空格并将其放入子模式的任何内容
  • ([^}]+?) - 它会查找至少1次发生但{的任何内容并将其放入子模式中。

将其与preg_match()功能

一起使用

OR

另一个简单的正则表达式:

preg_match('/([a-z0-9]+?) ([a-z0-9]+?)\}/', $str, $matches);
  • ([a-z0-9]+?) - a-z 0-9至少有一次不贪心
  • ([^}]+?) - a-z 0-9至少有一次不贪心

<强>输出:

Array ( [0] => myparam paramvalue} [1] => myparam [2] => paramvalue )

Demo

答案 1 :(得分:1)

试试这个正则表达式:

/\{\w+\s+(\w+)\}/

答案 2 :(得分:1)

if(preg_match('/\{'.preg_quote('myparam').' ([^\}]+)\}/', $input, $matches) {
  echo "myparam=".$matches[1];
} else {
  echo "myparam not found";
}
  1. 在preg_match中,'{'和'}'是特殊字符,因此需要进行转义
  2. preg_quote可能不是必要的,只要“myparam”永远不会有任何特殊的正则表达式字符
  3. (神秘)部分([^}] +)}匹配一个或多个不是'}'的字符,后跟'}'
  4. parantheses使第三个arg中的匹配可用于preg_match,在这种情况下为$ match

答案 3 :(得分:1)

要专门获取该参数值,首先必须匹配左侧部分:

/\{myparam/

至少有一个空格:

/\{myparam\s+/

捕获字符,直到找到一个结束的大括号:

/\{myparam\s+([^}]+)\}/

表达式[^}]+是一个负字符集,由开始括号后面的^表示;它的意思是“匹配除了这些之外的所有字符”。

答案 4 :(得分:0)

你也可以尝试这个:

.+?\s+([^}]+)

修改

说明:

.+?     means match everything one or more time but its lazy, will prefer to match as less as it can. 
\s+     means it will match white-spaces one or more time. 
([^}]+) means match everything except `}`(close bracket) one or more time and capture group.