正则表达式:不需要的字符

时间:2018-07-25 13:18:36

标签: regex perl

我有一个x出现的"<DATE>"字符串,必须替换,这很简单。 如果前面("\"前面有"\<DATE>",也不能替换,也很简单:

[^\\]<DATE>

但是字符串"<DATE>"不再匹配...

[^\\]?<DATE>

但是现在当然,字符串"\<DATE>"是一个匹配项,因为现在反斜杠已被忽略...

我尝试了(?<!...)之后的回溯,但是不能使用动态长度... 有办法吗?

谢谢您的帮助!

1 个答案:

答案 0 :(得分:1)

将我的主要评论转换为答案,因为这样做很有帮助。

(?<!\\)(?:\\{2})*\K<DATE>

模式匹配:

  • (?<!\\)-字符串中不立即包含反斜杠的位置(在正则表达式模式中,反斜杠与双反斜杠匹配)
  • (?:\\{2})*-与0个或多个双反斜杠序列匹配的非捕获组
  • \K-匹配重置运算符,用于将当前匹配值归零
  • <DATE>-匹配并使用的文字子字符串(=添加到匹配值中,并且正则表达式索引已高级)。