将哈希字符(#)与正则表达式匹配

时间:2011-02-03 10:22:54

标签: xml regex pattern-matching

我有一个包含正则表达式的XML文档(因此您不需要使用\来转义)。基本上我正在尝试匹配音乐和弦符号,这个正则表达式工作正常,但拒绝匹配哈希:

\b[A-G](m|b|\#|sus|\d)*?\b

1 个答案:

答案 0 :(得分:8)

问题在于,\b(单词边界锚点)仅匹配字母数字和非字母数字字符,因此在#之后不匹配(除非它本身后面跟着一个字母数字) )。

使用

\b[A-G](?:m|b|#|sus|\d)*(?:\b|(?<=#))

无需转义#

编辑:更改正则表达式以更好地重现预期的功能(我认为应该如此)

目前,你并没有匹配一些和弦;怎么样

\b[A-G](?:add|maj|j|m|-|b|#|sus|\d|°)*(?:\b|(?<=[#°-]))

这样,你可以匹配所有这些:

A7
Abm7 
A#m7sus4
A7b9#13
Amaj7#11
A#°
Abj7add13

我想仍然有改进的余地。