【发布时间】:2017-05-09 09:55:55
【问题描述】:
我需要扩展现有的正则表达式来捕获一些可选前缀。 我当前的正则表达式工作正常:
(?:\b)(?:mon|tue|wed|thu|fri|sat|sun)(?:\b)
并匹配由单词边界分隔的任何这些单词。
例如,给定字符串"mon-sun.sat",它将分别匹配mon、sun 和sat。
现在,假设上面的单词可以选择以"each" "only" "any" 之类的术语作为前缀,例如"mon. any-tue or only-wed. sat. each weekend"
我想扩展我的正则表达式以匹配和捕获(在上面的示例中),术语monany tueonly wedsat 但显然不是each,因为它没有为列表中的术语添加前缀。在实践中,要捕获的模式是:可选的prefix,后跟day of the week。
我曾尝试以多种方式扩展我的正则表达式,但均未成功。我想我搞砸了边界这个词。
换句话说:
有两组词说P={each,only,any}和W={mon,tue,wed,thu,fri,sat,sun}。我需要匹配任何元素w in W 可选地以元素p in P 为前缀。分隔符可以是任何 \b。
编辑:
我目前的尝试是
(:?\b) ((any|only|each)?(:?\b)) (:?mon|tue|wed|thu|fri|sat|sun) (:?\b)
但只会匹配montuewedsat。
【问题讨论】:
-
请分享不适合您的最佳尝试。为了解释问题,我们需要知道问题是什么。另外,当说“前缀”时,您的意思是在原始正则表达式中列出的替代项之前应该有一个连字符吗?
-
有两组词说
P={each,only,any}和W={mon,tue,wed,thu,fri,sat,sun}。我需要匹配任何元素w in W可选地以元素p in P为前缀。分隔符可以是任何\b。 -
\b是一个零宽度断言,它不匹配任何文本。使用\W*确保两个单词之间的任何非单词字符都匹配。看看regex101.com/r/QOWEKL/1。看看你的尝试,你破坏了非捕获组,你甚至根本不需要,(:?)匹配可选的:。
标签: regex