我有以下正则表达式Iter partition(Iter first, Iter last, UnaryPredicate pred,
std::forward_iterator_tag);
Iter partition(Iter first, Iter last, UnaryPredicate pred,
std::bidirectional_iterator_tag);
。
我希望它在iso日期时不匹配:
e.g。 [0-9-]{4}-[0-9-]{2}-[0-9-]{2}$
但我希望它与1970-01-01
或1979------
匹配。
或--------29
。
如果我只使用javascript,我会说-----11---
答案 0 :(得分:1)
您可能会发现以下模式令人满意:
let rec nb_blacks_lftmst acc = function
| Empty -> acc
| T (c, lft, _, _) ->
nb_blacks_lftmst (match c with R -> acc | B -> acc + 1) lft
let good_count = function
| Empty -> true
| T (_, lft, _, rgt) ->
let cpt = nb_blacks_lftmst 0 lft in
let rec aux acc = function
| Empty -> acc = cpt
| T (c, lft, _, rgt) ->
let acc = match c with R -> acc | B -> acc + 1 in
aux acc lft && aux acc rgt
in
aux 0 lft && aux 0 rgt
模式开头的第一个前瞻断言^(?=.*\-\-)(?=.*[0-9]{2})(?:[0-9]{4}|\-{4})-(?:[0-9]{2}|\-{2})-(?:[0-9]{2}|\-{2})$
至少出现一次,确保日期不是完整的ISO日期。第二个前瞻断言至少存在一个日期组件,阻止--
成为匹配。
答案 1 :(得分:0)
你可以使用这样的负面超前技巧:
(?!\d{4}-\d{2}-\d{2})^[0-9-]{4}-[0-9-]{2}-[0-9-]{2}$
<强> Working demo 强>
顺便说一下,你可以这样缩短你的正则表达式:
(?!\d{4}-\d{2}-\d{2})^[\d-]{4}-[\d-]{2}-[\d-]{2}$
更新:正如评论中提到的ctwheels,你可以通过在这样的外观中使用锚点来提高正则表达式的效率:
^(?!\d{4}-\d{2}-\d{2})[0-9-]{4}-[0-9-]{2}-[0-9-]{2}$