作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
尝试匹配散列字符失败,但对任何其他成员都成功正则表达式。
为什么会失败?
谢谢,
乔
UNIT = [ 'floor', 'fl', '#', 'penthouse', 'mezzanine', 'basement', 'room' ]
unit_regex = "\\b(" + UNIT.to_a.join("|") + ")\\b"
unit_regexp = Regexp.new(unit_regex, Regexp::IGNORECASE)
x=unit_regexp.match('#')
最佳答案
如评论中所述,您的问题是 \b
是正则表达式中的单词边界(除非它在字符类中,唉,\b
中的 /[\b]/
就像在双引号字符串中一样是退格键)。一个词的边界大致是
a word character on one side and nothing or a non-word character on the other side
但是#
不是单词字符所以/\b/
无法匹配 '#'
根本无法匹配您的整个正则表达式。
您将不得不更明确地说明您要匹配的内容。第一个刺是“字符串或空格的开头”而不是第一个 \b
和“字符串或空格的结尾”而不是第二个 \b
.可以这样表达:
unit_regex = '(?<=\A|\s)(' + UNIT.to_a.join('|') + ')(?=\z|\s)'
请注意,我已切换到单引号以避免所有双重转义麻烦。 ?<=
是一个正面回顾,这意味着(\A|\s)
需要在那里,但它不会被表达式匹配;同样,?=
是一个正面前瞻。参见 the manual更多细节。另请注意,我们正在使用 \A
而不是 ^
自 ^
匹配行的开头而不是字符串;同样,\z
而不是 $
因为\z
匹配 string 的结尾,而 $
匹配行的结尾。
您可能需要根据您的数据调整正则表达式,但希望这能让您入门。
关于ruby - 为什么这个正则表达式不适用于 Ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34487109/
我是一名优秀的程序员,十分优秀!