正则表达式忽略精确匹配

时间:2015-04-07 23:19:00

标签: regex

我想匹配以&开头的所有内容结束于;但是,如果且仅当字符串为<

时,请忽略

所以我已经完成了这个&(.+?)[^lt];,但问题是忽略了&foolt;我在这里做错了什么?

这是我的测试用例:

&asdas;
&asdasdqwe;
&ltasd;
<
&asdasdlt;
&foolt;

我期待的只有第四个被忽略。我使用http://www.regexr.com/

测试它

2 个答案:

答案 0 :(得分:2)

你的正则表达式使用的是否定的字符类[^lt],这意味着“不是l而不是t,恰好是1次出现”。

以下是符合您需要的正则表达式:

(?!^<$)&(\S+);

Demo就在这里。

(?!^<$)确保整个字符串/行不是<

答案 1 :(得分:1)

拆开你的正则表达式&(.+?)[^lt];

  • &&符号
  • (.+?)然后是一个或多个角色(不情愿地)。
  • [^lt]然后是一个角色,除了'l'或't'。
  • ;然后是分号

哪个不太对。你可以查看'lt;'在&符号后面加lookahead,如:

&(?!lt;).+?;
  • &&符号
  • (?!lt;)请确保我们与此职位lt;不匹配
  • .+?然后是一个或多个角色(不情愿地)。
  • ;然后是分号