我正在寻找支持以字母开头的命名参数的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
答案 0 :(得分:0)
你需要稍微限制你的模式以摆脱.*
,这会占用最后一次出现的后续子模式。然后,每当需要将值匹配到下一个键时,使用延迟点模式(.*?
),并在末尾添加$
(字符串结尾)锚点以确保您将获得所有带有懒点的文字。
d(?:uration)?:(?<time>.*?)\s*t(?:itle)?:(?<title>.*?)\s*(?:p(?:rize)?:(?<prize>.*))?$
请参阅regex pattern。
<强>详情
d(?:uration)?:
- d:
或duration:
(?<time>.*?)
- 组&#34;时间&#34;:任何零个或多个字符,尽可能少,直到后续子模式的最左边出现\s*
- 0+ whitespaces t(?:itle)?:
- title:
或t:
(?<title>.*?)
- 小组&#34;标题&#34;:任意零个或多个字符,尽可能少\s*
- 0+ whitespaces (?:
- 启动可选的非捕获组,匹配1或0次:
p(?:rize)?:
- p:
或prize:
(?<prize>.*)
- 小组&#34;奖品&#34;:任何零个或多个字符,尽可能少)?
- 可选组的结尾$
- 字符串结束。