多诺这个正则表达式正在做什么
(?>[^\,]*\,){3}([^\,]*)[\']?
(?>[^\,]*\,){4}([^\,]*)[\']?
任何人都可以在deatil中解释我更多
答案 0 :(得分:6)
有一个很棒的网站http://regex101.com可以满足这些需求!它描述了常规,并允许您测试和调试它们。
你的那些匹配像4(第二个5)的值,用逗号分隔,并将最后一个作为一个单一的匹配组返回:
(?>...)
是原子组。他们匹配后,他们永远不会离开它。
[^\,]
匹配除逗号[^\,]*\,
表示任何数字(甚至为零)的非逗号字符,然后是单字逗号(?>[^\,]*\,){3}
表示这样做会超过3次([^\,]*)[\']?
表示另外一个没有逗号的单词作为一个组,可能还有一个逗号。例如,在1,,333,4,5
中,第一个匹配1,,333,4,
并返回4
作为匹配组。第二个会找到1,,333,4,5
和5
作为群组。
修改:更多说明。
正则表达式有组。这些是可以有数字量词的部分或正则表达式 - 重复它们的次数({3}
)和一些选项。此外,在常规匹配后,我们可以找出每个组匹配的内容。
原子的,少说话,尽可能多地前进,永不回头。而且,它们不能如前所述被观看。由于性能原因,它们仅在此处使用。
因此,我们需要将逗号分隔值中的第4个单词作为一组。我们会这样做:
{3}
)原子组((?>...)
):
*
)的任意数量的字符([^\n]
)
[^...]
表示除描述之外的任何符号。\,
)分隔该词与下一个词(...)
)
[^\,]*
\,?
或[\,]?
),请将其删除
?
表示之前为0或1组,此处为单个逗号。因此,它从第一个原子组中的第一个单词开始,全部取出,然后取逗号。之后,重复2次。用逗号表示第一个单词。
之后,一个非原子组取第4个字。