正则表达式与方案中的字符串不匹配,但适用于其他平台



我正在使用模式[ []a-zA-Z0-9_:.,/-]+运行string-match以匹配示例文本Text [a,b]。尽管该模式适用于正则表达式 101,但当我在方案上运行它时,它会返回 #f .这是正则表达式101链接。

这是我正在运行的功能

(string-match "[ \[\]a-zA-Z0-9_:.,/-]+" "Text [a,b]")

为什么它不是在计划上工作,而是在任何地方工作?我错过了什么吗?

在 guile gnu 邮件列表中讨论了这个问题之后,我发现 Guile 的(ice-9 regex)库使用了 POSIX 扩展正则表达式。而且这种正则表达式不支持在字符类[..]转义,因此这就是为什么它不匹配字符串的原因。

但是,我使用以下函数作为解决方法,它可以工作:

(string-match "[][a-zA-Z]+" "Text[ab]")

我认为您的正则表达式语法没有任何问题,因为它被正确引用,因此我认为 Guile 或其使用的正则表达式库中一定存在错误,其中]只是没有在括号内以正确的方式解释。我通过使用八进制代码点值找到了解决方法:

(string-match "[A-Za-z\[\0135]+" "Text [a,b]")
; ==> #("Text [a,b]" (0 . 4))

你的正则表达式不是很好。它匹配这些字符的任意组合,因此"]/Te,3.xt[2"也匹配。如果你期待像"某物[某物,某物]"这样的字符串,我宁愿制作/[A-Z][a-z0-9]+ [[a-z0-9]+,[a-z0-9]+]/。例如。

(define pattern "[A-Z][a-z0-9]+ \[[a-z0-9]+,[a-z0-9]+\]") 
(string-match pattern "Test [q,w]")     ; ==> #("Test [q,w]" (0 . 10))
(string-match pattern "Be100 [sub,45]") ; ==> #("Be100 [sub,45]" (0 . 14))

相关内容

最新更新