对于构建更好,更智能的PDO语句的特殊功能,我已经匹配并提取了每个以冒号开头的单词。
PHP像Needle一样:/:\w+/
但是有时候我不得不处理冒号分隔的数字字符串。 (时间值)
2018-05-21T00:00:00+02:00
00:00:00
00:00
我试图排除它们,但是当我尝试为此扩展正则针时却没有成功。由于这个问题,我只是经常解决此问题。但是现在我想修复并了解如何解决此问题。
条件听起来很简单
从:\w+
的当前结果来看:
:light
at 07:15:0000
我只想匹配:
:light
在07:15:0000
答案 0 :(得分:2)
您无需使用"/:\w+/"
,而可以使用"/:[a-zA-Z]+/"
来捕获时间。
答案 1 :(得分:2)
如果:
之后的那些子字符串不能以数字开头,则可以使用
:[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)
,您可以匹配和跳过匹配项,同时匹配其他替代项。