-2

私は次のステートメントを持っています

echo preg_replace("/(?<=\d)(th|rd|st|nd)([^0-z])/i","<sup>$1</sup>$2","some text 1st<br />\n2nd<br />\n3rd<br />\n4th 5th 21nd 33rd 41st<br />\nsome text");

そしてそれは出力します

some text 1st<br />
2nd<br />
3rd<br />
4<sup>th</sup> 5<sup>th</sup> 21<sup>nd</sup> 33<sup>rd</sup> 41st<br />
some text

すべての場合に、th、rd、st、またはndを上付き文字で囲む方法がわかりません。

4

2 に答える 2

1

あなたはただ使うことができます

/(?:\b\d+)(th|rd|st|nd)\b/i

//boundary \b is required here or else it would also replace within a word

と置き換えます

<sup>$1</sup>
于 2012-12-12T16:44:22.180 に答える
0

[0-z]次の記号も含まれています。:;<=>?@[]^_`

特に、<含まれています。

[^[:alnum:]]代わりに試してください。

編集:さらに、それを先読みにしてみませんか?

/(?<=\d)(?:th|rd|st|nd)(?=![[:alnum:]])/i

$0次に、置換文字列で使用できます。

于 2012-12-12T16:40:37.843 に答える