1

文字が前に付いた名前付きパラメーターをサポートするXregexp式を調べています。これが私の表現です:

(?:d:|duration:)(?<time>.*\S+).*(?:t:|title:)(?<title>(?:.*\S+))(?:.*(?:(?:p:|prize:)(?<prize>.*\S+)))

うまく機能していますが、p:<prize>グループをオプションとして入れたいのですが、どの式を使用すればよいですか?

また、空白がある場合はキャプチャを終了しようとしています

例:

私が欲しいもの:

duration:1h 5m 1s title:Title test [p:prize]<-optionnal group

prizeグループをオプションにしたい

現在の式と一致:

duration:1h 5m 1s title:Title test p:Something random

グループの結果:

  • time:1h 5m 1s

  • title:Title test

  • prize:Something random

4

1 に答える 1

0

パターンを少し制限して.*、後続のサブパターンの最後の発生まですべてを食い尽くすようにする必要があります。.*?次に、値を次のキーまで一致させる必要があるときはいつでもレイジー ドット パターン ( ) を使用し、$最後に (文字列の終わり) アンカーを追加して、すべてのテキストがレイジー ドットで取得されるようにします。

d(?:uration)?:(?<time>.*?)\s*t(?:itle)?:(?<title>.*?)\s*(?:p(?:rize)?:(?<prize>.*))?$

正規表現パターンを参照してください。

詳細

  • d(?:uration)?:-d:またはduration:
  • (?<time>.*?)- グループ「時間」: 後続のサブパターンの左端の出現まで、可能な限り少ない 0 個以上の文字
  • \s*- 0+ 空白
  • t(?:itle)?:-title:またはt:
  • (?<title>.*?)- グループ「タイトル」: 任意の 0 個以上の文字、できるだけ少ない文字
  • \s*- 0+ 空白
  • (?: - 1 回または 0 回の出現に一致するオプションの非キャプチャ グループの開始:
    • p(?:rize)?:-p:またはprize:
    • (?<prize>.*)- グループ「賞品」: 任意の 0 個以上の文字、できるだけ少ない文字
  • )?- オプショングループの終わり
  • $- 文字列の終わり。
于 2017-08-28T11:57:22.173 に答える