【问题标题】:How to remove date from string in "F d, Y" format?如何从“F d,Y”格式的字符串中删除日期?
【发布时间】:2015-06-03 20:01:53
【问题描述】:

我需要从F d, Y 格式的字符串中删除所有日期。例如这一行:

生效日期为 2015 年 5 月 30 日
生效日期为 2015 年 6 月 1 日

应该变成这样:

现行的
采取当前行动

这是我一直在使用的代码:

$input = "Act current to May 30, 2015";
$output = preg_replace('/([January|February|March|April|May|June|July|August|September|October|November|December] [0-3]\d, \d{4})/', '', $input);
echo "$output\n";

输出不是我所期望的:

电流到马
生效日期为 2015 年 6 月 1 日

我相信我的部分问题是 [0-3]\d 期望日部分采用 NN 格式,但输入可能采用 N

【问题讨论】:

  • 为什么月份名称周围有[]?也许()
  • 您希望从It is expected that as of June 9, 150,000 plush "elephpants" will be roaming the planet. 得到什么?
  • @anantkumarsingh 我已经经常给你写信,"Please check my answer" cmets 是没用的和不必要的。

标签: php regex date preg-replace


【解决方案1】:

这应该适合你:

在这里,我首先创建一个包含所有月份名称的数组。然后你可以在你的正则表达式模式中使用这个数组。

$str = "Act current to May 30, 2015"; //Act current to June 1, 2015
$months = array_map(function($v){
    return date("F", strtotime("2000-" . $v . "-1"));
}, range(1, 12));

echo $str = preg_replace("/(" . implode("|", $months) .")\s\d{1,2},\s\d{4}/", "", $str);

正则表达式解释:

(your|months|separated|by|a|pipe)\s\d{1,2},\s\d{4}/
  • 第一捕获组
    • 您所有月份中的一个月
  • \s 匹配任何空白字符 [\r\n\t\f ]​​i>
  • \d{1,2} 匹配数字 [0-9]
    • 量词:{1,2} 1 到 2 次,尽可能多次,按需回馈 [贪婪]
  • , 匹配字符,字面意思
  • \s 匹配任何空白字符 [\r\n\t\f ]​​i>
  • \d{4} 匹配数字 [0-9]
    • 量词:{4} 正好 4 次

【讨论】:

  • 您可能希望 {1,2} 作为月份中的日期量词,或者将其扩展为匹配 1 到 31。(此外:OP 并不清楚仅替换 valid 日期。)
  • @salathe 啊,是的。完全忘记了他们:) 感谢您的通知。
  • 从您的 cmets 中,我能够使用以下代码使代码正常工作: $output = preg_replace('/(January|February|March|April|May|June|July|August|September|十月|十一月|十二月) \d{1,2}, \d{4}/', '', $input);
  • @WonkotheSane 这是我的代码,只是你手动编写了月份并用空格更改了\s
  • 添加...我删除了 \s 因为日期的格式非常一致。也就是说,感谢您提供更多详细信息来解释您的代码。如果我确实遇到其他变化,我会知道如何处理它。
【解决方案2】:

问题出在正则表达式中,正如你所建议的那样,这个正则表达式会为你工作:

preg_replace('/(January|February|March|April|May|June|July|August|September|October|November|December) [1-31]+, \d{4}/', '', $input);

【讨论】:

    猜你喜欢
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    相关资源
    最近更新 更多