我希望在Pharo 6中的正则表达式中匹配[
。
这很好用:
| matcher |
matcher := RxMatcher forString: '\['.
matcher matches: '['. "produces true"
但是,我无法在[]
内看到如何执行此操作。 [[]
和[\[]
都不起作用。
我可以将结束]
与[]]
匹配,但我无法弄清楚如何使用[
执行此操作。
答案 0 :(得分:5)
查看RxParser>>atom
和RxParser>>characterSet
的实现,根本不支持转义范围集中的字符。
根据文档,其他“特殊”字符(^, - ,)只能由集合中的特定位置处理,以免触发解析不同的分支。
解决方法是将范围集拆分为or-ed组,例如
[[a-z]
到
(\[|[a-z])
请注意,Pharo用户通常被指示使用PetitParser而不是正则表达式进行文本解析,因为PetitParser更易于管理和调试。至少可以说是一种更加面向对象的正则表达式。
答案 1 :(得分:1)
我正在添加一个与GNU Smalltalk相关的答案,因为该问题标有[smalltalk],因此可能会出现在互联网搜索结果中。
在GNU Smalltalk中,regexs have Perl like synta x和字符[
可以转义为\[
。例如:
st> '[ac' =~ '\[[ab]'
MatchingRegexResults:'[a'
st> '[bc' =~ '\[[ab]'
MatchingRegexResults:'[b'
转义也在一个范围内工作:
st> '[bc' =~ '[\[b]'
MatchingRegexResults:'['
值得一提的是,消息=~
可以与正则表达式一起传递给字符串。