最初に私の文字列を見てください:
$a = "[ child : parent ]";
パターンが次のとおりであることをどのように検出できますか?
[(optional space)word or character(optional space) : (optional space)word or character(optional space)]
PHPでは次のようにこれをキャッチできます。
あなたの正規表現は/\[ *\w+ *: *\w+ *]/
このように見えるコードを記述して、一致するかどうかを確認します。
if (preg_match('/regex/', $string)) {
// do things
}
正規表現の説明
\
あるため、開き括弧の前に
円記号( )があります。[
バックスラッシュは、その特別な意味が使用されないようにします。*
)は、前の文字式の0個以上と一致します。この場合、0個以上のスペースに一致します。代わりに式を使用した場合\s*
、0個以上の空白文字(スペース、タブ、改行)に一致します。最後に、前の文字の0または1と一致させたい場合は、の?
代わりにを使用します*
。+
)は、前の文字式の1つ以上と一致します。文字式は\w
、文字、数字、またはアンダースコアに一致します。アンダースコアを一致させたくない場合は、代わりに文字クラスを使用する必要があります。たとえば、を使用できます[A-Za-z0-9]
。正規表現の詳細については、http://www.regular-expressions.infoおよびhttp://www.regular-expressions.info/php.htmlを参照してください。
サンプルテキストから、正規表現ではなく人間の単語を意味していると思います\w
preg_match('/\[ ?([a-z]+) ?: ?([a-z]+) ?\]/i', $a, $matches);
説明されたデモ: http: //regex101.com/r/hB2oV9
$matches
両方の値を保存し、でテストしますvar_dump($matches);
正規表現のphp固有のバージョンについてはわかりませんが、これは機能するはずです。
\[ ?\w+ ? : ?\w+ ?\]
これは、私が過去に必要なパターンの正規表現を見つけるために使用したサイトです。
この正規表現を使用する \[\s*\w+\s*:\s*\w+\s*\]
私はおそらくこのようにします
preg_match('/^\[\s?\w+\s+:\s+\w+\s?\]$/', $string)