括弧を使用せずに正規表現の一部をグループ化することは可能ですか? または、言い換えれば、特定の括弧付きステートメントと一致しませんか? つまり、次の正規表現を考えてみましょう。
$pattern = '/^(what|where|who) (are|is) (.+)$/i';
preg_match($pattern, $input, $matches);
今。最初の 2 つのサブクエリ (縦棒のあるサブクエリ) に注目してください。それらが発生するのを防ぐにはどうすればよいですか?「彼は誰ですか」の場合$input
、「彼」だけが一致するサブクエリになるようにします。
$matches[3]
この例では、つかむだけで正しい結果が得られることを理解しています。ただし、アプリケーションの性質上、動的に正規表現を生成しているため、この例のような構造になるとは限りません。X 個の縦棒で区切られたサブクエリと、Y 個の(.+)
サブクエリを持つことができます。私はそれらを一致させたいだけです(.+)
。
これを行うことは可能ですか?必要に応じて正規表現を書き直しても問題ありませんが、サブクエリをマークする括弧を使用せずにステートメントをグループ化する方法がわかりません。問題があれば、私はPHPを使用しています。
ありがとう!