使用正则表达式从“3月11日”中选择“th”

时间:2013-11-28 03:51:59

标签: php regex sublimetext2

如何使用正则表达式替换以下数据中的th,nd,st和任何空格。

我的随机文字随身携带......“3月11日”....我的随机文字随身携带。 我的随机文字在这里与nd在一起......“02nd March”....我的随机文字在这里与nd一起来到这里。 我的随机文字带着它进去了......“3月1日”....我的随机文字带着st进去了。

到目前为止,我尝试了这个[0-9] 0-9,但它也取代了这个数字。如何保留数字或只选择所需的部分?

5 个答案:

答案 0 :(得分:1)

(?<=\d)(th|rd|nd|st)

Positive Lookbehind

答案 1 :(得分:1)

您可以捕获数字字符并匹配以下thndst

对于括号中的模式的第一个匹配,通常后引用为$1\1

尝试以下方法:

Find: ([0-9]+)[a-zA-Z]{2}
Replace: $1 

请参阅Live demo

答案 2 :(得分:1)

在php中,以下代码段用于在数字后立即执行stnd等的查找和替换,并将其替换为**。您可以看到可以插入“任何字符串”以进行替换。

对@ jaco0646大肆宣传!

<?php
$inputString = 'This is the 2nd of November<br>';
$pattern = '/(?<=[0-9])(st|nd|rd|th)/';
$replacement = '**';

$newString = preg_replace($pattern, $replacement, $inputString);
echo $inputString;
echo $newString;
?>

答案 3 :(得分:0)

考虑以下Regex ......

(?<=\"\d+)[a-zA-Z]+

祝你好运!

答案 4 :(得分:0)

正如Johnsyweb所说,replace命令的确切语法将取决于您使用的语言 jaco0646有一个很好的正则表达式,可以匹配你想要的东西,并且批判性地捕获它。 (第二组括号可以做到这一点(以及对备选方案进行分组)。顺便说一下,第一组括号是非捕获的,这要归功于?作为其中的第一个字符。)
无论如何,在捕获了您想要的文本后,您将在替换表达式中将该捕获组称为\1。这是反斜杠 - 一 如果您的正则表达式中有多个捕获组,那么您可以使用\2引用第二个捕获组,依此类推。
如果您有嵌套捕获组,则按其左括号的顺序计算它们。因此,在((foo)bar)中,\1将是“foobar”而\2将只是“foo”。