正则表达式工作得很好。问题是第二个也会匹配第一个的结果!
如果您传入A#m
,第一个正则表达式会将其更改为
<span style="color:#910202;">A#m</span></a>
(顺便说一句,这不是一个有效的 HTML 片段;那是</a>
做什么的?)
这将成为第二个正则表达式的输入。那一个会看到A#
,替换它,最终结果将是
<span style="color:#910202;"><span style="color:#910202;">A#</span></a>m</span></a>
可能不是你所期望的。
一种解决方案是将两个表达式简单地合并为一个:
preg_replace('/\b(A#m?)\b/','<span style="color:#910202;">$1</span></a>',$content);
更新:如果您想创建一个识别许多不同和弦的正则表达式,请使用交替:
preg_replace('/\b(A#(maj7|sus2|sus4)?)\b/',
'<span style="color:#910202;">$1</span>',
$content);
简短说明(A#(maj7|sus2|sus4)?)
以便您可以对其进行扩展:此正则表达式A#
单独匹配或可选匹配(由于) ,?
后跟(由于s )、、、。我不知道和弦的所有选项是什么,但是阅读我链接到的参考/教程是个好主意。只学习基础知识会给你很大的使用能力。|
maj7
sus2
sus4