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 少なくとも 1 回は貪欲ではない
  • ([^}]+?)- az 0-9 少なくとも 1 回は貪欲ではない

出力:

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

デモ

于 2013-07-02T07:28:12.897 に答える
1

この正規表現を試してください:

/\{\w+\s+(\w+)\}/
于 2013-07-02T07:21:11.447 に答える
1
if(preg_match('/\{'.preg_quote('myparam').' ([^\}]+)\}/', $input, $matches) {
  echo "myparam=".$matches[1];
} else {
  echo "myparam not found";
}
  1. preg_match では、「{」と「}」は特殊文字であるため、エスケープする必要があります
  2. 「myparam」に特別な正規表現文字が含まれない限り、preg_quote は必要ないかもしれません。
  3. (不可解な) 部分 ([^}]+)} は、'}' 以外の 1 つ以上の文字に一致し、その後に '}' が続きます。
  4. 括弧は、preg_match の 3 番目の引数 (この場合は $matches) でその一致を利用できるようにします。
于 2013-07-02T07:30:28.057 に答える
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 に答える