2011-02-03 30 views
4

正規表現を含むXML文書があるので(\でエスケープする必要はありません)。基本的に私は音楽のコード記号と一致するようにしようとしているが、この正規表現はうまく動作しますが、ハッシュと一致することを拒否:ハッシュ文字(#)と正規表現のマッチング

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

どのような正規表現エンジンを使用していますか?おそらくハッシュをエスケープしてはいけません。 – marcog

+0

私はその正規表現エンジンを信じていますが、XMLファイルです。 – Miguel

答えて

7

問題は\bは、ワード境界アンカーは、英数字のみと非英数字の間で一致していることですしたがって、それは#の後にマッチしません(それ自体に英数字が続く場合を除きます)。

使用

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

のいずれか、#をエスケープする必要はありません。

EDITは:(私はそれがあるべきだと思うと)よりよい

現在、あなたがが、いくつかのコードを一致していないことを意図した機能を再現するために正規表現を変更しました。方法について

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

そのように、あなたはこれらのすべてを一致させることができます。

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

私は改善の余地はしかし、まだそこにあると思います。

+0

答えをお寄せいただきありがとうございます\ b – Miguel

+0

あなたの長い例はうまくいかないようです。私はCDATAセクションを使って<をエスケープしましたが、正規表現はコンパイルされません – Miguel

+0

私は最後に文字クラスで大失敗をしました。今すぐお試しください。 –

関連する問題