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

Wil*_*hes 5 regex smalltalk pharo

我希望[在Pharo 6中使用正则表达式进行匹配.

这很好用:

| matcher |
matcher := RxMatcher forString: '\['.
matcher matches: '['. "produces true"
Run Code Online (Sandbox Code Playgroud)

但是,我无法在内部看到如何做到这一点[].既不工作[[]也不[\[]工作.

我可以匹配收盘]罚款[]],但我无法弄清楚如何做到这一点[.

Pet*_*nak 5

不支持

综观实施RxParser>>atomRxParser>>characterSet根本就没有支持,在此范围内设置逃逸字符.

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

解决方法

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

[[a-z]
Run Code Online (Sandbox Code Playgroud)

(\[|[a-z])
Run Code Online (Sandbox Code Playgroud)

更好的工具

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