使用正则表达式,我试图匹配满足以下条件(按显示顺序)的任何字符串:
$
; 然后[a-zA-Z]
; 然后[a-zA-Z0-9_.\[\]]*
;然后|
; 然后@
; 然后[a-zA-Z]
; 然后[a-zA-Z0-9_]*
;然后:
换句话说,如果一个冒号在字符串的结尾处找到,那么它应该不会算作匹配。
以下是一些有效匹配的示例:
$tmp1|@hello
$x2.h|@hi_th3re
Valid match$here|@in_the middle of other characters
以下是无效匹配的一些示例:
$tmp2|@not_a_match:"because there is a colon"
$c.4a|@also_no_match:
这是我尝试过的一些模式:
(\$[a-zA-Z])([a-zA-Z0-9_.\[\]]*)(\|@)([a-zA-Z][a-zA-Z0-9_]*(?!.[:]))
(\$[a-zA-Z])([a-zA-Z0-9_.\[\]]+)?(\|@)([a-zA-Z][a-zA-Z0-9_]*(?![:]))
(\$[a-zA-Z])([a-zA-Z0-9_.\[\]]+)?(\|@)([a-zA-Z][a-zA-Z0-9_]*)([^:])
这种模式将满足您的需求
\$[A-Za-z]+[\w.\[\]]*[|]@[A-Za-z]+[\w]*+(?!:)
我正在使用所有格量词来减少使用的回溯[\w]*+
。您还可以使用原子组代替所有格量词,例如
\$[A-Za-z]+[\w.\[\]]*[|]@[A-Za-z]+(?>[\w]*)(?!:)
笔记
\ w => [A-Za-z0-9_]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句