【问题标题】:Selecting just "th" from "11th March" using regex使用正则表达式从“11th March”中选择“th”
【发布时间】:2013-11-28 03:51:58
【问题描述】:

如何使用正则表达式将以下数据中的 th、nd、st 替换为空格。

我的随机文本在这里带有 th ......“3 月 11 日” ....我的随机文本在这里带有 th。 我的随机文本在这里带有 nd ......“3 月 2 日” ....我的随机文本在这里带有 nd。 我的随机文本放在这里,里面有 st .....“01st March” ....我的随机文字放在这里,里面有 st。

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

【问题讨论】:

标签: php regex sublimetext2


【解决方案1】:

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

Positive Lookbehind

【讨论】:

  • 答案有点简洁,但正确。你能说明“替换”部分是如何工作的吗?
  • @Floris 我现在正在使用 Sublime Text 2 的搜索和替换功能。如果我想在 PHP 中做同样的事情,我会怎么做?
【解决方案2】:

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

对于括号中的模式的第一个匹配项,反向引用通常是 $1\1

尝试以下方法:

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

Live demo

【讨论】:

    【解决方案3】:

    在 php 中,以下代码 sn-p 用于在数字后立即查找和替换 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;
    ?>
    

    【讨论】:

    • 感谢 PHP 版本。
    • 我添加这个是为了回应您的评论“如果我想在 PHP 中做同样的事情......” - 我认为 @jaco0464 的回答对细节有点过于简单了。
    【解决方案4】:

    考虑以下正则表达式...

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

    祝你好运!

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-04
        • 2011-06-18
        • 1970-01-01
        • 2012-11-21
        • 2019-10-22
        • 2017-12-10
        相关资源
        最近更新 更多