1

次の文字列を照合しています。

  • 透かし=テスト
  • 透かし=テキストテスト|位置-24-50
  • 透かし=テキストテスト|位置-24-50|色-6aa6cc
  • 透かし=テキストテスト|位置-24-50|色-6aa6cc|サイズ-48

次の正規表現を使用します。

watermark=(text-\w+\|position-\d+-\d+\|color-([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})\|size-\d+|text-\w+\|position-\d+-\d+\|color-([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})|text-\w+\|position-\d+-\d+|\w+)

それは機能しますが、それはとても醜いので、私は熱い棒で目を突き出したいと思います。正規表現の達人の誰かが、あなたの方法についての簡単な説明でそれをリファクタリングすることをいとわないでしょうか?

4

3 に答える 3

1
watermark=(text-\w+\|position-\d+-\d+(\|color-([0-9a-fA-F]{3}){1,2}(\|size-\d+)?)?|\w+)

(例+​​元の正規表現から)「サイズ」は前のすべてのフィールドが使用可能であることを意味し、「色」は前のすべてのフィールドが使用可能であることを意味することを確認したので、ネストされたオプションを作成しました。

(\|color-([0-9a-fA-F]{3}){1,2}
  (\|size-\d+)?
)?

について([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})は、に「簡略化」しました([0-9a-fA-F]{3}){1,2}

于 2012-06-29T14:54:52.407 に答える
1
\bwatermark=(?:text-|)\w+(?:\|position-\d+-\d+(?:\|color-[0-9a-fA-F]+(?:\|size-\d+|)|)|)\b
于 2012-06-29T14:59:35.120 に答える
1

ファクタリングソフトウェアhttp://regexformat.comを介して正規表現を実行できます

前:

watermark=(text-\w+\|position-\d+-\d+\|color-([A-Fa-f0-9]{3}(?:[A-Fa-f0-9]{3})?)\|size-\d+|text-\w+\|position-\d+-\d+\|color-([A-Fa-f0-9]{3}(?:[A-Fa-f0-9]{3})?)|text-\w+\|position-\d+-\d+|\w+)

後:

watermark=(?:text-\w+\|position-\d+-\d+(?:\|color-[A-Fa-f0-9]{3}(?:[A-Fa-f0-9]{3})?(?:\|size-\d+)?)?|\w+)

ここに画像の説明を入力してください

 watermark=
 (?:
    text- \w+ \| position- \d+ - \d+ 
    (?:
       \| color- [A-Fa-f0-9]{3} 
       (?: [A-Fa-f0-9]{3} )?
       (?: \| size- \d+ )?
    )?
  | \w+ 
 )
于 2021-04-09T18:50:09.730 に答える