正则表达式模式说明

时间:2015-05-19 12:44:56

标签: regex

多诺这个正则表达式正在做什么

(?>[^\,]*\,){3}([^\,]*)[\']?
(?>[^\,]*\,){4}([^\,]*)[\']?

任何人都可以在deatil中解释我更多

1 个答案:

答案 0 :(得分:6)

有一个很棒的网站http://regex101.com可以满足这些需求!它描述了常规,并允许您测试和调试它们。

你的那些匹配像4(第二个5)的值,用逗号分隔,并将最后一个作为一个单一的匹配组返回:

  • (?>...)是原子组。他们匹配后,他们永远不会离开它。
    • [^\,]匹配除逗号
    • 之外的任何字符
    • [^\,]*\,表示任何数字(甚至为零)的非逗号字符,然后是单字逗号
  • (?>[^\,]*\,){3}表示这样做会超过3次
  • ([^\,]*)[\']?表示另外一个没有逗号的单词作为一个组,可能还有一个逗号。

例如,在1,,333,4,5中,第一个匹配1,,333,4,并返回4作为匹配组。第二个会找到1,,333,4,55作为群组。

修改:更多说明。

正则表达式有。这些是可以有数字量词的部分或正则表达式 - 重复它们的次数({3})和一些选项。此外,在常规匹配后,我们可以找出每个组匹配的内容。

原子的,少说话,尽可能多地前进,永不回头。而且,它们不能如前所述被观看。由于性能原因,它们仅在此处使用。

因此,我们需要将逗号分隔值中的第4个单词作为一组。我们会这样做:

  • 我们将采用3次({3})原子组((?>...)):
    • 哪个词汇 - 任何非逗号字符(*)的任意数量的字符([^\n]
      • [^...]表示除描述之外的任何符号。
    • 以逗号(\,)分隔该词与下一个词
  • 现在,我们想要的词开始了。我们打开一个小组((...)
    • 如上所述:[^\,]*
  • 可能还有一个逗号,如果有一个逗号(\,?[\,]?),请将其删除
    • ?表示之前为0或1组,此处为单个逗号。

因此,它从第一个原子组中的第一个单词开始,全部取出,然后取逗号。之后,重复2次。用逗号表示第一个单词。

之后,一个非原子组取第4个字。