0

我有一个这样的字符串:

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

我怎样才能paramvalue得到myparam

4

5 回答 5

2

简单的正则表达式:

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

preg_match()功能一起使用

或者

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

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

输出:

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

演示

于 2013-07-02T07:28:12.897 回答
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. 括号使该匹配在第三个 arg 中可用于 preg_match,在这种情况下为 $matches
于 2013-07-02T07:30:28.057 回答
1

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

/\{myparam/

后跟至少一个空格:

/\{myparam\s+/

捕获字符,直到找到右花括号:

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

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

于 2013-07-02T07:32:23.417 回答
1

试试这个正则表达式:

/\{\w+\s+(\w+)\}/
于 2013-07-02T07:21:11.447 回答
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.
于 2013-07-02T08:39:19.583 回答