簡體   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