0

単語が()の間にある場合、どのようにエコーしますか?これが私の例です:

<?php
$text = "(test1) ignore this right here (test2) ignore (test3)";
Echo get_texts_between("()",$text);
?>

出力は次のようになります:test1 test2 test3

4

2 に答える 2

2

そのために preg_match を使用できます。

$text = "(test1) ignore this right here (test2) ignore (test3)";
$pattern = '/\(([a-z0-9]+)\)/';
preg_match_all($pattern, $text, $matches);

echo implode(' ', $matches[1]);

これはa-z0-9にのみ一致することに注意してください()。これはあなたの例文と一致します。たとえば、4 つの文字と 1 つの数字のみを一致させる場合、またはグループ内に他の文字が存在する可能性がある場合は、OP で正確に一致させたいものの例をさらに追加する必要があります。

于 2012-08-05T14:59:22.843 に答える
2

preg_replace興味のない部分 ( ) を単一のスペースに置き換えることで実行できます。

echo preg_replace('~^\(|\)[^\(]*\(|\)$~', ' ', $text);

^\(これは、文字列の先頭にある単一の開き括弧、文字列内の閉じ括弧と開き括弧の部分、\)[^\(]*\(または文字列の末尾にある単一の閉じ括弧のいずれかに一致する正規表現を使用します\)$

末尾のスラッシュが必要ない場合は、単純なスラッシュを追加trimしてください。または、次のものもありpreg_splitます。

echo implode(' ', preg_split('~^\(|\)[^\(]*\(|\)$~', $text, -1, PREG_SPLIT_NO_EMPTY));

しかし、1行で少し複雑になっています。パターンは同じです。

于 2012-08-05T15:13:45.587 に答える