我如何匹配[在Smalltalk正则表达式?

时间:2017-08-22 17:49:33

标签: regex smalltalk pharo

我希望在Pharo 6中的正则表达式中匹配[

这很好用:

| matcher |
matcher := RxMatcher forString: '\['.
matcher matches: '['. "produces true"

但是,我无法在[]内看到如何执行此操作。 [[][\[]都不起作用。

我可以将结束][]]匹配,但我无法弄清楚如何使用[执行此操作。

2 个答案:

答案 0 :(得分:5)

不支持的

查看RxParser>>atomRxParser>>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:'['

值得一提的是,消息=~可以与正则表达式一起传递给字符串。