0

私がやろうとしているのは、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/メソッドが機能していないようです。

4

2 に答える 2

4

正規表現は問題なく機能します。問題は、2番目のものも最初のものと一致することです!

を渡すとA#m、最初の正規表現はこれを次のように変更します

<span style="color:#910202;">A#m</span></a>

(ちなみに、これは有効なHTMLフラグメントではありません。そこで何をしているの</a>でしょうか?)

これは、2番目の正規表現への入力になります。その1つが表示され、A#それを置き換えると、最終結果は次のようになります。

<span style="color:#910202;"><span style="color:#910202;">A#</span></a>m</span></a>

おそらくあなたが期待するものではありません。

1つの解決策は、両方の式を1つに単純に統合することです。

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)、、、のいずれかが続く場合に一致します。コードのすべてのオプションが何であるかはわかりませんが、リンク先のリファレンス/チュートリアルを読むことをお勧めします。基本だけを学ぶことはあなたに使うための多くの力を与えます。|maj7sus2sus4

于 2012-04-21T12:50:36.197 に答える
1

この単純な正規表現で十分です。

preg_replace('/A#(m?)/','<span style="color:#910202;">A#\\1</span></a>',$content);

ここでの主なアイデアは、その後に置換文字列mを追加する場合です。m

http://ideone.com/iQ6P8

于 2012-04-21T13:14:25.783 に答える