使用正则表达式自动上标序数后缀

时间:2012-11-17 22:42:11

标签: php regex

我试过这样做,但我只是吮吸正则表达式。我需要的是有一个正则表达式,它将用1 st ,3 rd 和9 th 替换第1,第3和第9个{ {1}}和<sup>围绕任何'rd''th'和'st',前面有一个数字,后面没有字母或数字。

3 个答案:

答案 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>