グループ1のパターンが同じ行に再び表示されない限り、どのように正規表現は、グループ1の後にすべてを一致させることができますか?

地雷:

私はその接頭辞が再び表示されている、しない限り、私は、オプションの接頭辞の後にすべてのものをキャプチャすることができます方法を理解する問題を抱えています。[FFFFFF]のタグがマッチした、オプションの追加の基である対1群としてやり直すます持っていいだろう。

私は新しいっぽいregexでするだと私はregex101.comサイトが大好きですが、これは単に理解の私のレベルより上であるように思われます。

式:

(\[[0-9a-fA-F]{6}\])?(.*)

サンプルテキスト

[00B800][!] Green - [004DB8] Blue does not match!!

[FFFFff][!] White

[e60000][!] Red

123456

Test string, another test abcdef

これは私が取得しようとしていた結果です。

ここでは、画像の説明を入力します。

リンク

https://regex101.com/r/z3CbHm/2/

第四鳥:

あなたは、最初のグループのオプションを作り、2キャプチャグループを使用することができます。

あなたはパターンの次の出現が表示されるまで続いて第二のグループのために、どちらかと一致\[[0-9a-fA-F]{6}\]または文字列の末尾を。

(\[[0-9a-fA-F]{6}\])?(.+?)(?=\[[0-9a-fA-F]{6}\]|$)

正規表現のデモ

あなたは第二のグループのための可能な先頭の空白の文字を省略したい場合は:

(\[[0-9a-fA-F]{6}\])?(?:[^\S\r\n]*(.+?))(?=\[[0-9a-fA-F]{6}\]|$)

それは一致します

  • (\[[0-9a-fA-F]{6}\])?オプションの中のパターンと一致するグループを1
  • (?: 非キャプチャグループ
    • [^\S\r\n]* 改行以外の空白文字のマッチ0+出現
    • (.+?)キャプチャグループ2は、改行以外の任意の文字の1+出現と一致します
  • ) 閉じるグループ
  • (?= 右側にあるものを正lookhead、アサートがあります
    • \[[0-9a-fA-F]{6}\] パターンに一致
    • | 若しくは
    • $ 文字列の末尾
  • ) 閉じる先読み

正規表現のデモ

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=383635&siteId=1