特定の文字が含まれていない場合にのみ、 preg_replace_callback が一致を返すようにしようとしています。
したがって、文字列に次が含まれている場合:
{xxxx}
マッチを返します。含まれている場合:
{xxxx|xxxx}
マッチを返さないでください。
これが私の試みです:
\{(.*?!\|.*)}
ありがとうございます!
特定の文字が含まれていない場合にのみ、 preg_replace_callback が一致を返すようにしようとしています。
したがって、文字列に次が含まれている場合:
{xxxx}
マッチを返します。含まれている場合:
{xxxx|xxxx}
マッチを返さないでください。
これが私の試みです:
\{(.*?!\|.*)}
ありがとうございます!
である必要があります/{([^|])*}/
。文字のない任意の文字列に一致し、|
空の文字列にも一致します。
これは、より「ブラックリストに載せる」アプローチです。有効な文字が何かわかっている場合は[]
、現在のアプローチ#$!@~<?>":'{}[]
では文字列などの文字も許可されるため、「ホワイトリスト」アプローチ (文字クラスで許可されている文字のリスト) を使用する必要があります。
あなたの完全なパターンはこれになります:
/{([^|]*)}/
中かっこで囲まれた、パイプ以外の任意の文字に一致します。