我可以指定我希望前面的字符是(非A DIGIT)还是(BEGINNING ANCHOR)?
我正在寻找“1/2”,但我想忽略像21/22这样的情况。我知道我可以排除前面或后面的数字,如下所示:
/([^0-9])1\/2([^0-9])/
但是当比赛发生在线的开头或结尾时,这会失败。是锚和^和&允许分组条款?
答案 0 :(得分:1)
如果您还希望匹配a1/2
之类的内容,则可以使用negative lookbehind(前提是您的正则表达式实现支持它):
irb(main):015:0> 'a1/2' =~ /(?<!\d)1\/2/
=> 1
irb(main):016:0> '11/2' =~ /(?<!\d)1\/2/
=> nil
这是“字符串1/2
,前面没有数字”。
如果你不能使用lookbehind,你几乎可以将你的需求转换为像/([^\d]|^)(1\/2)/
这样的正则表达式,这是一个不是数字或短语开头的字符,后跟字符串{ {1}}(第二个捕获组)“。
答案 1 :(得分:0)
对我有用的一个解决方案是
([^0-9-]1\/2)|(^1\/2)
可能还有其他更优雅的选择,可能使用lookbehind。