2016-09-30 9 views
0

私はルーティングシステム上で作業しています。私はカスタム正規表現パターンを許可したいと思います。 私の質問は、正規表現にキャプチャグループが含まれているかどうかをどのように検出できますか?正規表現にキャプチャグループが含まれているかどうかを確認します

たとえば、パターン[0-9]+は、キャプチャグループが含まれていないため動作します。パターン([0-9]+)は機能しません。

これは([A-Za-z]+)([0-9]+)などのキャプチャグループで始まるパターンで動作します、()文字マスクでltrimrtrimにパターンを試してみました。しかし、キャプチャグループを含むパターンでは、これはうまくいかないでしょう。では、パターンにキャプチャグループが含まれているかどうかをどうすれば確認できますか?

+1

なぜユーザーはキャプチャグループを使用できませんか?彼は以前の試合を参考に潜在的にそれらを使用することができます。例えば ​​'([ab])c \ 1'は' aca'や 'bcb'と一致しますが、' acb'や 'bca'では一致しません – Adassko

+0

あなたの目標言語は何ですか? – revo

+0

申し訳ありませんが、PHP – Tafelglotzer

答えて

1

まずあなたがいずれかに一致し、省略すべきは、任意の開口部ブラケットは、単独で残ったり?P<?'または?<が続いているがあるかどうかを確認後、結果から文字を脱出しました。これらは、指定されたキャプチャグループの構文を開いています。

\\.(*SKIP)(?!)|\((?(?=\?)\?(P?['<]\w+['>])) 

PHP:

if (preg_match("~\\\\.(*SKIP)(?!)|\((?(?=\?)\?(P?['<]\w+['>]))~", $regex)) { 
    // Capturing group found 
} 

正規表現の説明:

\\.      # Match any escaped character 
(*SKIP)(?!)    # Skip over and omit recent match 
|      # OR 
\(      # Match a single `(` 
(?(?=\?)    # Which if is followed by `?` 
    \?      # 
    P?['<]\w+['>]   # Next characters should be matched as ?P'name', ?<name> or ?'name' 
)      # End of conditional statement 
0

私はあなたが例えばキャプチャグループがあるかどうかを確認したいと思います(something)がテストパターンの先頭にはありません。これは私にとってはうまくいくようです...

$pattern = '/^.+\(([^\)]+)\)/'; 

if (preg_match($pattern, $testpattern)) { 
    // Capturing group found that is not at the start of the string 
} 
関連する問題