为了构建更好、更智能的 PDO 语句的特殊函数,我匹配并提取了以冒号开头的每个单词。
PHP 类似 Needle:/:\w+/
但有时我也必须处理用冒号分隔的数字的字符串。 (时间值)
2018-05-21T00:00:00+02:00
00:00:00
00:00
我试图排除它们,但当我尝试为此扩展我的正则表达式针时从未成功。由于这个问题,我经常解决这个问题。但现在我想修复并了解如何解决这个问题。
情况听起来很简单
- 查找以冒号开头的每个单词。
- 删除冒号前有数字的所有匹配项。
因此从当前结果来看 :\w+
:
:light
at 07:15:0000
我只想匹配:
:light
at 07:15:0000
最佳答案
如果:
之后的那些子字符串不能以数字开头,您可以使用
:[A-Za-z_]\w*
请参阅regex demo .
这里,
-
:
- 冒号 -
[A-Za-z_]
- 一封信或_
(如果第一个字符只能是字母,则删除_
) -
\w*
- 0+ 个字母、数字或/和_
替代方案
您还可以匹配那些类似时间的字符串,并匹配并捕获:\w+
:
\d+:\d+(?::\d+)?|(:\w+)
请参阅regex demo 。仅当组 1 匹配时才获取组 1 值。
在 PHP 中,您可以通过 SKIP-FAIL 实现您所需要的功能。正则表达式:
'~\d+:\d+(?::\d+)?(*SKIP)(*F)|:\w+~'
参见another demo .
与 (*SKIP)(*F)
,您可以在匹配其余选项的同时匹配和跳过匹配项。
关于javascript - 正则表达式 |将单词与冒号匹配,但忽略类似时间的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51594153/