1

最初に私の文字列を見てください:

$a = "[ child : parent ]";

パターンが次のとおりであることをどのように検出できますか?

 [(optional space)word or character(optional space) : (optional space)word or character(optional space)]
4

5 に答える 5

2

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を参照してください。

于 2013-02-06T14:26:11.513 に答える
1

サンプルテキストから、正規表現ではなく人間の単語を意味していると思います\w

preg_match('/\[ ?([a-z]+) ?: ?([a-z]+) ?\]/i', $a, $matches);

説明されたデモ: http: //regex101.com/r/hB2oV9

$matches両方の値を保存し、でテストしますvar_dump($matches);

于 2013-02-06T14:58:51.160 に答える
1

正規表現のphp固有のバージョンについてはわかりませんが、これは機能するはずです。

\[ ?\w+ ? :  ?\w+ ?\]

これは、私が過去に必要なパターンの正規表現を見つけるために使用したサイトです。

于 2013-02-06T14:24:20.707 に答える
1

この正規表現を使用する \[\s*\w+\s*:\s*\w+\s*\]

于 2013-02-06T14:25:23.253 に答える
1

私はおそらくこのようにします

preg_match('/^\[\s?\w+\s+:\s+\w+\s?\]$/', $string)

于 2013-02-06T14:27:03.713 に答える