当字符串本身以字边界结束时,Ruby正则表达式匹配由字边界字符包围的字符串

时间:2017-03-22 19:38:23

标签: ruby regex

我的正则表达式:/\b+#{string}\b+/其中string ='test - '

我的测试用例:#test-#1

我希望正则表达式匹配test-。如果我的测试字符串没有以单词边界字符结尾,那么这种方法可以正常工作,但如果确实存在则会中断。

#chars也可以是任何其他字边界字符,所以另一个例子是:

-test--1我仍然只想匹配test-

反作用示例案例有效:

正则表达式:/\b+#{string}\b+/其中string ='test'

测试用例:#test#1

1 个答案:

答案 0 :(得分:1)

由于\b含义取决于上下文,因此您需要在正则表达式中使用基于环视的边界。由于您希望在非单词字符或字符串位置的开头/结尾之间匹配您的关键字,您可以使用

/(?<!\w)#{Regexp.escape(string)}(?!\w)/

查看Ruby demo

<强>详情

  • (?<!\w) - 搜索字符串
  • 之前一定不能有字词
  • #{Regexp.escape(string)} - 必须对搜索字符串进行转义,以便将所有特殊字符视为文字字符
  • (?!\w) - 搜索词后面一定不能有字词。