以下正则表达式应为Do Dollars Dollar或#do #Dollars或#Dollar,但不适用于Doblabla(目前为止)等。
/^@(?P<name>\w+) (?P<amount>\d+) [#]?Do(?:llars?)?/i
我该如何改变?所以它不再匹配Dogfood和Dogs等......
更新3:未解决之后:
/^@(?P<name>\w+) (?P<amount>\d+) [#]?(do(?:llars?|s))/i
以下内容不匹配:
@name 2 do
有什么想法吗?
我的第二个问题是如何让它也匹配到:Dox和#Dox
所以最后我希望它与
匹配@name 2 #do
@name 2 do
@name 2 #dollars
@name 2 dollars
@name 1 dollar
@name 1 #dollar
@name 2 dox
@name 2 #dox
,别无其他。
非常感谢!
冰
答案 0 :(得分:2)
如果我没有弄错的话,(?:llars?)?
表明这将匹配以do开头的任何内容,而不关心它之后是什么,因为它是可选的。
在结尾处添加$以强制字符串以do或dollar结尾。
答案 1 :(得分:2)
这应该适合你:
/^@(?P<name>\w+) (?P<amount>\d+) #?Do(?:llars?|x)(?:\s|$)/i
这匹配名称和金额后跟一个可选的#然后“do”然后“llar”,“llars”,空格或字符串的结尾。
答案 2 :(得分:1)
使用$
锚点标记行尾,|
运算符代替alt-1|alt-2|…
:
/^@(?P<name>\w+) (?P<amount>\d+) #?(do(?:llars?|x)?)$/i
答案 3 :(得分:1)
我在Regexp.net上尝试了一些后找到答案
[#]?(do(?:llars?))
答案 4 :(得分:0)
也许我不完全理解,但你的正则表达式看起来过于复杂。这样做有什么不对?
/^@name [12] #?do(llar|llars|x)?$/
编辑:在阅读完评论后,听起来您还有其他要求,而您没有提出问题。编辑那些我们有一个实际的完整问题可以使事情变得更容易。