我有一个这样的字符串:
{param1}{param2}{param3}....{myparam paramvalue}{paramn}
我怎样才能paramvalue得到myparam
我有一个这样的字符串:
{param1}{param2}{param3}....{myparam paramvalue}{paramn}
我怎样才能paramvalue得到myparam
简单的正则表达式:
/\({[^ ]+?) ([^}]+?)\}/
{[^ ]+?)- 它将查找至少发生 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 )
    if(preg_match('/\{'.preg_quote('myparam').' ([^\}]+)\}/', $input, $matches) {
  echo "myparam=".$matches[1];
} else {
  echo "myparam not found";
}
要专门获取该参数值,您首先必须匹配左侧部分:
/\{myparam/
后跟至少一个空格:
/\{myparam\s+/
捕获字符,直到找到右花括号:
/\{myparam\s+([^}]+)\}/
该表达式[^}]+是一个负字符集,由^左括号后面的符号表示;它的意思是“匹配除这些之外的所有字符”。
试试这个正则表达式:
/\{\w+\s+(\w+)\}/
    你也可以试试这个:
.+?\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.