我有一个这样的字符串:
{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.