我试过这样做,但我只是吮吸正则表达式。我需要的是有一个正则表达式,它将用1 st ,3 rd 和9 th 替换第1,第3和第9个{ {1}}和<sup>
围绕任何'rd''th'和'st',前面有一个数字,后面没有字母或数字。
答案 0 :(得分:5)
这是微不足道的,所以我将为您提供所需的组件。
(?<=\d)
检查当前位置之前是否存在数字。
(A|B|C)
检查当前位置的任何正则数据A,B或C.
这就是你所需要的。
答案 1 :(得分:1)
试试这段代码:
$string = "bla 1st bla 2nd bla 3rd bla 5th 9thSomethingNotToBeReplaced ";
echo preg_replace('/(\d)+(st|nd|rd|th)([^\w\d]|$)/', '$1<sup>$2</sup>$3', $string);
答案 2 :(得分:0)
我假设你也想要处理'第二':
$string = '1st, 2nd, 3rd and 9th';
echo preg_replace_callback('/1st|2nd|3rd|[4-9]th/', function($m){
return $m[0]{0} . '<sup>' . substr($m[0], 1) . '</sup>';
}, $string);
// 1<sup>st</sup>, 2<sup>nd</sup>, 3<sup>rd</sup> and 9<sup>th</sup>