10

以前の宿題の質問のおかげでRegex to match tags like <A>, <BB>, <CCC> but not <ABC>、今は別の宿題の質問があります。

<LOL>, <LOLOLOL>(3 つの大文字、反復可能な最後の 2 文字) のようなタグを一致させる必要がありますが、そうではありません<lol>(大文字である必要があります)。

前回の宿題のテクニックを使って、やってみ<[A-Z]([A-Z][A-Z])\1*>ました。これは機能しますが、追加の問題があります。繰り返し部分は大文字と小文字を混在させることができます!

<LOLolol>したがって、 ,も一致させる必要があり<LOLOLOlol>ます。これは大文字 3 文字であり、最後の 2 文字は大文字と小文字が混在しているためです。で大文字と小文字を区別しないパターンを作成できることはわかっています。これにより、私が持っている正規表現と/i一致させられますが、最初の 3 文字のチェックでも大文字と小文字が区別されないため、 にも一致します。<LOLolol><lololol>

では、これを行うにはどうすればよいですか?最初の 3 文字を大文字と小文字を区別してチェックし、残りの文字を大文字と小文字を区別せずにチェックするにはどうすればよいですか? これは正規表現で可能ですか?

4

1 に答える 1

8

はい!実際、埋め込み修飾子と呼ばれるものを使用して、いくつかのフレーバーでこれを行うことができます。これにより、修飾子がパターンに配置され、修飾子が適用されるパターンの部分を基本的に選択できます。

大文字と小文字を区別しないための埋め込み修飾子は(?i)であるため、この場合に必要なパターンは次のとおりです。

<[A-Z]([A-Z]{2})(?i:\1*)>

参考文献

  • regular-expressions.info/Modifiers
    • 正規表現内でモードを指定する
      • の代わりに/regex/i、次のこともできます/(?i)regex/
    • 正規表現の一部のみのモードのオンとオフを切り替える
      • あなたもできる/first(?i)second(?-i)third/
    • モディファイアスパン
      • あなたもできる/first(?i:second)third/
于 2010-06-25T10:13:50.170 に答える