繁体   English   中英

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

[英]How do I match [ in a Smalltalk regular expression?

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

这很好用:

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

但是,我无法在[]看到如何做到这一点。 [[][\\[]不起作用。

我可以与[]]匹配关闭] ,但我无法弄清楚如何用[

不支持

查看RxParser>>atomRxParser>>characterSet ,根本不支持在范围集中转义字符。

根据文档,其他“特殊”字符(^, - ,)只能由集合中的特定位置处理,因此不会触发解析不同的分支。

解决方法

解决方法是将范围集拆分为or-ed组,例如

[[a-z]

(\[|[a-z])

更好的工具

请注意,Pharo用户通常被指示使用PetitParser而不是正则表达式进行文本解析,因为PetitParser更易于管理和调试。 至少可以说是一种更加面向对象的正则表达式。

我正在添加一个与GNU Smalltalk相关的答案,因为该问题用[smalltalk]标记,因此可能会出现在互联网搜索结果中。

在GNU Smalltalk中,正则表达式具有类似于synta x的Perl ,并且字符[可以转义为\\[ 例如:

st> '[ac' =~ '\[[ab]' 
MatchingRegexResults:'[a'
st> '[bc' =~ '\[[ab]' 
MatchingRegexResults:'[b'

转义也在一个范围内工作:

st> '[bc' =~ '[\[b]' 
MatchingRegexResults:'['

这可能值得一提,message =~可以与正则表达式一起传递给字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM