[英]How do I match [ in a Smalltalk regular expression?
我希望匹配[
在Pharo 6中的正則表達式。
這很好用:
| matcher |
matcher := RxMatcher forString: '\['.
matcher matches: '['. "produces true"
但是,我無法在[]
看到如何做到這一點。 [[]
和[\\[]
不起作用。
我可以與[]]
匹配關閉]
,但我無法弄清楚如何用[
。
查看RxParser>>atom
和RxParser>>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.