我要做的是用另一种字体颜色版本代替A#,A#m,...:
preg_replace('/\bA#m\b/','<span style="color:#910202;">A#m</span></a>',$content);
preg_replace('/\bA#\b/','<span style="color:#910202;">A#</span></a>',$content);
不幸的是,如果A#m是输入,它只会设置A#部分的样式。有帮助吗? /\b...b /方法似乎不起作用。
答案 0 :(得分:4)
正则表达式工作得很好。问题是第二个也会匹配第一个的结果!
如果您传入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);
更新:如果您想制作能识别许多不同和弦的正则表达式,请使用alternation:
preg_replace('/\b(A#(maj7|sus2|sus4)?)\b/',
'<span style="color:#910202;">$1</span>',
$content);
(A#(maj7|sus2|sus4)?)
的简短说明,以便您可以对其进行扩展:此正则表达式单独匹配A#
或可选(由于?
)后跟 中的一个(由于|
s)maj7
,sus2
,sus4
。我不知道和弦的所有选项是什么,但是阅读我链接到的参考/教程是个好主意。只学习基础知识可以让你获得很多力量。
答案 1 :(得分:1)
这个简单的正则表达式可以。
preg_replace('/A#(m?)/','<span style="color:#910202;">A#\\1</span></a>',$content);
这里的主要想法是,如果它后跟m
,我们会在替换字符串中添加m
。