是否可以在正则表达式中指定(锚定或匹配)

时间:2012-03-20 18:45:31

标签: regex

我可以指定我希望前面的字符是(非A DIGIT)还是(BEGINNING ANCHOR)?

我正在寻找“1/2”,但我想忽略像21/22这样的情况。我知道我可以排除前面或后面的数字,如下所示:

/([^0-9])1\/2([^0-9])/

但是当比赛发生在线的开头或结尾时,这会失败。是锚和^和&允许分组条款?

2 个答案:

答案 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。

相关问题