首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex前瞻性和回顾性澄清

Regex前瞻性和回顾性澄清
EN

Stack Overflow用户
提问于 2016-02-22 17:53:51
回答 1查看 3.4K关注 0票数 1

好的,我知道在展望lookahead中有一些Regex问题,但是我还没有找到一些解析器,对于我的内部问题,我可以很容易地关联(...oh很好)。

以下是我如何理解Regex前瞻性和前瞻性!

查找/查找(LA/LB):

在主Regex之前的LA/LB (?=IF_YOU_FIND_WHAT_IS_HERE)START_MATCHING_WHAT_IS_HERE (?!IF_YOU_DO_NOT_FIND_WHAT_IS_HERE)START_MATCHING_WHAT_IS_HERE LA/LB接替主Regex START_MATCHING_WHAT_IS_HERE(?=UNTIL_THIS IS_NOT TRUE) START_MATCHING_WHAT_IS_HERE(?!UNTIL_THIS IS_NOT TRUE)

所以对于第二部分(接续 ),我真的不太确定,我希望能重写一下上面的符号,或者为我的出色理解而竖起一些大拇指(哦,是的)。

所以回到地球上,据我所知,在“主”Regex中的每个字符匹配之后.

  1. 积极展望:它检查前面的内容是否仍然与展望部分匹配。
  2. 负前瞻性:它检查前面的内容是否仍然与展望部分不匹配。
  3. 正向后视:它检查匹配的内容是否仍然与lookbehind部分匹配。
  4. 负后视:它检查匹配的内容是否仍然与查找部分不匹配。

现在,对于SRLC部分(Super Combos)

让我们看看这个Regex (?<=REGEX_1)(?

我的策略是,在某些情况下,我们可以将REGEX_1和REGEX_2结合起来。如果是这样的话,我们应该有:

(?<=REGEX_C)((MAIN_REGEX(?C用于:合并

基本上,我的理解是:

  1. REGEX_C必须首先成功才能使MAIN_REGEX开始匹配
  2. 然后,character-by-character开始匹配MAIN_REGEX。
  3. 进行正匹配之后,REGEX_3立即分析全局匹配.
  4. 紧随其后的是REGEX_4,他将展望未来,看看是否一切都好。
  5. 然后我们从2开始,并尝试匹配下一个字符
  6. *当然,如果任何REGEX失败,则重新设置全局匹配

我不知道,如果我写的是准确的哈哈。当我想尝试的时候,这是to0的混乱。大多数情况下,我通过尝试和错误成功,但我想得到一些澄清,以便我可以得到它在我的第一次尝试。轰隆

谢谢你的回复!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-22 18:30:31

理解断言的成功之处在于它们都涉及

从字符之间朝一个方向看,而不是看,看。

或者任何你能想到的东西。

由于它们是在字符之间,所以它们具有由

regex引擎

字符匹配的优先级是从左到右。

正则表达式的读取顺序也是如此。

断言的优先事项是:

先检查某物之前的断言。

最后检查某物之后的断言。

字符之间的位置是检查的位置。

当你写断言的时候,你必须想象自己站在那个位置。

具有更多解释的更新

通常,更好地习惯断言的最好方法是查看示例。

在我看来,这是你的模板表达式。

代码语言:javascript
复制
 (?<= REGEX_1 )      # Here is Between a character, lookbehind for a certain set of chars

 (?<! REGEX_2 )      # At the same place, lookbehind that a char subset is not there;

 (                   # (1 start)
      MAIN_REGEX          # Some data to match
 )                   # (1 end)

 (?<! REGEX_3 )      # Here is Between the last char matched in group 1
                     # and the next character yet to be matched.
                     # Look behind at the last char matched in group 1  
                     # and make sure it is within a set of chars.

 (?= REGEX_4 )       # At the same place, look ahead that a subset of chars are there

这里有一些更具体的东西。

这就是正则表达式如何查找单词边界构造\b的方式。

单词边界实际上只存在于字符之间。

它以两种不同的方式向两个方向看以满足自己。

好好研究一下。

代码语言:javascript
复制
 (?:                           # Cluster start
      (?:                           # -------
           ^                             # Beginning of string anchor
        |                              # or,
           (?<= [^a-zA-Z0-9_] )          # Lookbehind assertion for a char that is NOT a word
      )                             # -------
      (?= [a-zA-Z0-9_] )            # Lookahead assertion for a char that is IS a word

   |                              # or,

      (?<= [a-zA-Z0-9_] )           # Lookbehind assertion for a char that is IS a word
      (?:                           # -------
           $                             # End of string anchor
        |                              # or,
           (?= [^a-zA-Z0-9_] )           # Lookahead assertion for a char that is NOT a word
      )                             # -------
 )                             # Cluster end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35560525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档