【问题标题】:Replacing a string using preg_match使用 preg_match 替换字符串
【发布时间】:2011-08-10 16:22:00
【问题描述】:

我在使用 preg_match 查找和替换字符串时遇到问题。感兴趣的字符串是:

<span style="font-size:0.6em">EXPIRATION DATE: 04/30/2011</span>

我需要将日期“2011 年 4 月 30 日”定位并替换为不同的日期。有人可以给我一根骨头,给我正则表达式以在 PHP 中使用 preg_match 匹配此模式吗?我还需要它以这样的方式匹配,即它只替换到第一个关闭跨度而不是稍后在代码中关闭跨度标签,例如:

<span style="font-size:0.6em">EXPIRATION DATE: 04/30/2011</span><span class="hello"></span>

我不精通正则表达式,虽然我花了最后一个小时试图学习足够的知识来完成这项工作,但我完全失败了。非常感谢!

编辑:如您所见,这让我筋疲力尽。我的意思是 preg_replace,而不是 preg_match。

【问题讨论】:

    标签: php regex


    【解决方案1】:

    如果您要更换,请考虑使用preg_replace(),类似

    preg_replace('@(\d{2})/(\d{2})/(\d{4})@', '<new date>', $string);
    

    【讨论】:

    • 这很完美!谢谢布朗先生。说真的……这是一个巨大的帮助!
    • @Sardine:如果可以解决您的问题,通常最好将答案标记为“已接受”:)
    • @Brecht:谢谢!我试过了,它不会让我:(系统说我必须再等 4 分钟。谢谢你的提示!
    【解决方案2】:

    这个怎么样:

    $toBeFoundPattern = '/([0-9][0-9])\/([0-9][0-9])\/([0-9][0-9][0-9][0-9])/';
    $toBeReplacedPattern = '$2.$1.$3';
    
    $inString = '<span style="font-size:0.6em">EXPIRATION DATE: 04/30/2011</span>';
    
    // Will convert from US date format 04/30/2011 to european format 30.04.2011
    echo preg_replace( $toBeFoundPattern, $toBeReplacedPattern, $inString );
    

    和打印

    EXPIRATION DATE: 30.04.2011
    

    模式总是以相同的所谓分隔符开始和结束。通常使用字符 /。

    $1 引用字符串,它与 ([0-9][0-9]) 匹配的第一个字符串匹配,$2 引用 (...) 和 $3 最后一个匹配的四个字母 (...) .

    [...] 匹配单个字符,它是括号内列出的字符之一。例如。 [a-z] 匹配所有小写字母。

    要在模式中使用特殊含义字符 / ,您需要将其转义为 \ 以使其成为文字斜线字符。

    更新:使用下面指出的 {..} 是重复模式的简写。

    【讨论】:

    • 模式包围可以是正斜杠以外的字符(见我的回答),它们只需要保持一致。
    • 谢谢!绝对有助于完善比赛!
    【解决方案3】:

    正则表达式应该是:

    (0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d
    

    如果你只想匹配一个实例,这是可以的。对于多个实例,请改用 preg_match_all。取自http://www.regular-expressions.info/regexbuddy/datemmddyyyy.html

    编辑:您是只想在 PHP 脚本中进行搜索和替换,还是想做一些 javascript 实时替换?

    【讨论】:

    • 我喜欢日期和月份验证,但第一年有点限制(仅限 20 和 21 世纪)
    猜你喜欢
    • 2020-05-15
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 2013-02-05
    相关资源
    最近更新 更多