首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除字符串中的所有内容,但具有特定模式的日期除外。

删除字符串中的所有内容,但具有特定模式的日期除外。
EN

Stack Overflow用户
提问于 2018-03-30 08:00:02
回答 2查看 572关注 0票数 1

除了日期(Dd)外,我正在尝试删除从数据库中获取的字符串中的所有内容。

我本可以删除所有文本(A等),但文本之间也有数字。

代码语言:javascript
复制
$strings = [
    'Originele startdatum ',
    'Op verzoek van klant de ingangsdatum gelijkgetrokken met alle andere abonnementen zodat er maar 1 factuur wordt verstuurd.'
];

$result[] = [
    'AboOpmerking' => str_replace($strings, '', $row['AboOpmerking']),
];

未触及的字符串如下所示:

示例1:

原始资料3-10-2017

示例2:

原始资料1-1-2014 Op verzoek van klant de ingangsdatum gelijkgetrokken met alle和er abonnementen zodat er maar 1 factuur wordt verstuurd。

我已经找到了这个正则表达式,但是我不知道如何使用它,因为当我打印$matches时,它给了我一个空数组

代码语言:javascript
复制
^([0]?[1-9]|[1|2][0-9]|[3][0|1])[./-]([0]?[1-9]|[1][0-2])[./-]([0-9]{4}|[0-9]{2})$
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-30 08:07:19

您可以将^ (与字符串位置的开头匹配)和$ (匹配字符串位置的结尾)替换为\b (单词边界),以匹配整个单词的日期子字符串,并使用preg_match (仅提取第一个匹配)或preg_match_all (如果有多个匹配):

代码语言:javascript
复制
preg_match('~\b(?:0?[1-9]|[12][0-9]|3[01])([./-])(?:0?[1-9]|1[0-2])\1(?:[0-9]{4}|[0-9]{2})\b~', $s, $matches);

regex演示

单词边界的另一种选择可以是(?<!\d)(?!\d)旁观者(如果日期可以粘在字母上或出现在下划线之间):

代码语言:javascript
复制
preg_match('~(?<!\d)(?:0?[1-9]|[12][0-9]|3[01])([./-])(?:0?[1-9]|1[0-2])\1(?:[0-9]{4}|[0-9]{2})(?!\d)~', $s, $matches);
票数 1
EN

Stack Overflow用户

发布于 2018-03-30 09:18:36

正如建议的那样,还有一种选择,您可以匹配一个日期,比如格式\d{1,2}-\d{1,2}-\d{4},创建一个DateTime,或者指定格式化来验证它是一个有效的日期。

要只替换第一个日期,您可以使用匹配替换,并指定1作为第四个参数,只进行1次替换。

代码语言:javascript
复制
$strings = [
    'Originele startdatum 3-10-2017',
    'Originele startdatum 3-10-2017 3-10-2018 ',
    'Originele startdatum 1-1-2014 Op verzoek van klant de ingangsdatum gelijkgetrokken met alle andere abonnementen zodat er maar 1 factuur wordt verstuurd.'
];

$pattern = '/\d{1,2}-\d{1,2}-\d{4}/';
foreach ($strings as $string) {
    if (preg_match($pattern, $string, $matches) === 1 && false !== DateTime::createFromFormat('d-m-Y', $matches[0])) {
        echo preg_replace($pattern, "", $string, 1) . "<br>";
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49570670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档