1

私はこのphpコードを持っていて、中括弧{}内のすべてを一致させたい

$sentence= "This {is|or|and} a {cat|dog|horse} for a {kid|men|women}";
preg_match("/\{.*?\}/", $sentence, $result);
print_r($result);

しかし、私はこの出力しか得ません:

Array ( [0] => {is|or|and} ) 

しかし、私が必要としているのは、次のような結果です。

Array ( [0] => is|or|and
[1] => cat|dog|horse
[2] => kid|men|women
 ) 

どの正規表現を使用すればよいですか?

4

5 に答える 5

10

preg_match_all代わりに使用しますか?

preg_match_all("/\{.*?\}/", $sentence, $result);

中括弧が必要ない場合は、次の 2 つのことを行うことができます。

ブレース内のパーツをキャプチャし、$result[1]HamZa が正しく提案したようにそれらを元に戻すために使用します。

preg_match_all("/\{(.*?)\}/", $sentence, $result);
print_r($result[1]);

または、ルックアラウンドを使用します (ただし、理解するのが少し難しい場合があります)。

preg_match_all("/(?<=\{).*?(?=\})/", $sentence, $result);
print_r($result[0]);

通常はより安全と考えられている[^}]*の代わりに を使用することもできます。.*?

于 2013-08-15T14:42:28.473 に答える
2

はい、使用する必要がありpreg_match_allますが、正規表現を に変更する必要もあります\{(.*?)\}証明については、この Regex101 を参照してください。元の正規表現では、結果をグループ化していなかったため、中括弧も取得していませんでした。

于 2013-08-15T14:43:49.323 に答える