2

对于构建更好更智能的 PDO 语句的特殊功能,我匹配并提取了以冒号开头的每个单词。

PHP 像 Needle/:\w+/

但有时也会发生我必须处理带有冒号分隔数字的字符串。(时间价值)

  • 2018-05-21T00:00:00+02:00
  • 00:00:00
  • 00:00

我试图排除它们,但当我试图为此扩展我的正则表达式针时从未成功。由于这个问题,我经常解决这个问题。但现在我想修复并了解如何解决这个问题。

条件听起来很容易

  1. 查找以冒号开头的每个单词。
  2. 删除冒号前有数字的每个匹配项。

因此,从当前结果来看:\w+

:light在 07:15:0000

我只想匹配:

:light在 07:15:0000

4

2 回答 2

3

如果后面的那些子字符串:不能以数字开头,您可以使用

:[A-Za-z_]\w*

请参阅正则表达式演示

这里,

  • :- 一个冒号
  • [A-Za-z_]- 一个字母或(如果第一个字符只能是一个字母,则_删除)_
  • \w*- 0+ 个字母、数字或/和_

备择方案

您也可以匹配那些类似时间的字符串,并匹配和捕获 :\w+

\d+:\d+(?::\d+)?|(:\w+)

请参阅正则表达式演示。如果第 1 组匹配,则仅获取第 1 组值。

在 PHP 中,您可以使用SKIP-FAIL正则表达式完全实现您所需要的:

'~\d+:\d+(?::\d+)?(*SKIP)(*F)|:\w+~'

查看另一个演示

使用(*SKIP)(*F),您可以匹配和跳过匹配项,同时匹配其余选项。

于 2018-07-30T12:46:18.397 回答
2

你不需要使用"/:\w+/"你可以使用"/:[a-zA-Z]+/"不会捕获时间。

于 2018-07-30T12:42:49.330 回答