Tempered Greedy Token - 在负前瞻之前放置点有什么不同

Tempered Greedy Token - 在负前瞻之前放置点有什么不同

<table((?!</table>).)*</table>

但是,匹配我的所有表格标签

<table(.(?!</table>))*</table>

才不是。第二个似乎是有意义的,如果我试图用文字写出表达,但我无法理解第一个。

有人可以向我解释一下这个区别吗?

作为参考,我从这里得到了“Tempered Greedy Token”这个术语:http//www.rexegg.com/regex-quantifiers.html#tempered_greed


牧羊人nacy
浏览 713回答 3
3回答

HUX布斯

((?!</table>).)*检查要匹配的特定字符不能是字符串中的起始字符</table>。如果是,则只匹配该特定字符。*重复相同的零次或多次。(.(?!</table>))*只有在没有跟随</table>,零次或多次的情况下才匹配任何字符。因此,这将匹配表标记内的所有字符,从而删除最后一个字符,因为最后一个字符后跟</table>。并且以下模式</table>断言在匹配结束时必须有一个关闭表标记。这使得匹配失败。看到这里

红颜莎娜

一个脾气暴躁的贪婪令牌真正意味着:“匹配,但只有一点”你是怎么做到的:你把你不想匹配的令牌作为一个(?!notAllowedToMatch)点前面的负向前瞻&nbsp;.(匹配任何一件事),然后用一个星重复整个事情*:((?!notAllowedToMatch).)*这个怎么运作:“看,并吃一个”一遍又一遍,通过输入字符串从左到右移动一个字符,直到看到不允许的序列(或字符串的结尾),此时匹配停止。Wiktor更详细的答案很好,我只是觉得一个更简单的解释是有序的。
打开App,查看更多内容
随时随地看视频慕课网APP