Java 理解“中的regexp”;,(?=([^\";]*\";[^\";]*\";)*[^\";]*$)";用于拆分

Java 理解“中的regexp”;,(?=([^\";]*\";[^\";]*\";)*[^\";]*$)";用于拆分,java,regex,split,Java,Regex,Split,在学习Java课程时,我遇到了以下代码: String[]columns=row.split(“,(?=([^\“]*\”[^\“]*\”[^\“]*$”)*”); 通过检查,我们可以理解括号之间有一个regexp字符串 检查后,事情变得更加棘手: 将表达式拆分为以下几部分: ,-我们希望字符串被分割的字符 (-在第16点关闭 ?=-(?=X)X,通过零宽度正向前瞻 (-在第11点关闭 [^\”]-除«“»以外的任何字符 *-我不明白 \“-字符«”» [^\”]-同样,与第5点一样,除了«“»

在学习Java课程时,我遇到了以下代码:

String[]columns=row.split(“,(?=([^\“]*\”[^\“]*\”[^\“]*$”)*”);

通过检查,我们可以理解括号之间有一个regexp字符串

检查后,事情变得更加棘手:

将表达式拆分为以下几部分:

  • -我们希望字符串被分割的字符
  • -在第16点关闭
  • ?=
    -(?=X)X,通过零宽度正向前瞻
  • -在第11点关闭
  • [^\”]
    -除«“»以外的任何字符
  • *
    -我不明白
  • \“
    -字符«”»
  • [^\”]
    -同样,与第5点一样,除了«“»以外的任何字符
  • *
    -同样,就像第6点一样,我不确定我是否明白了这一点
  • \”
    -同样,如第7点所示,字符«“»
  • -关闭从第4点开始的表达式
  • *
    -这是某种逻辑AND吗
  • [^\”]
    -与第5点和第8点类似,除了«“»以外的任何字符
  • *
    -与第6、9和12点相同
  • $
    -边界匹配器,指示行的结尾
  • -关闭从点2开始的表达式
  • 从第3点开始我就不理解,因为我不理解什么是前瞻。我能够从中得到一个要点,作为参考,我们可以阅读正面和负面的前瞻:

    如果要匹配某个不后跟其他内容的内容,则必须使用负前瞻。在解释字符类时,本教程解释了为什么不能使用反字符类来匹配不后跟u的q。负前瞻提供了解决方案:q(?!u)。负先行结构是一对圆括号,左括号后跟一个问号和一个感叹号。在先行结构中,我们有一个普通的正则表达式u

    正向前瞻的工作原理是一样的。q(?=u)匹配一个后跟u的q,而不使u成为匹配的一部分。正向前瞻结构是一对括号,左括号后跟一个问号和一个等号

    您可以在lookahead中使用任何正则表达式(但不能在lookahead中使用,如下所述)。任何有效的正则表达式都可以在lookahead中使用

    好的,现在第3点已经被理解了,到目前为止我得到的是,我们正在尝试用字符«,»(第1点)拆分字符串,后跟表达式
    ([^\“]*\”[^\“]*\”*[^\“]*$

    在这一点上,我相信问题已经变成:在Java中,*如何粘合regexp中的表达式?

    通过调查,我发现了三个例子,但我仍然不明白:

    • 在贪婪量词中,X*X,零次或多次
    • 在不情愿的量词中,X*?十、 零次或多次
    • 在所有格量词中,X*+X,零次或多次

    如果我发现任何扣款有误,请纠正我,并感谢您抽出时间。

    阅读此文章?尝试粘贴正则表达式并阅读解释正则表达式中
    *
    的含义非常基本,应该在最基本的介绍中介绍。它允许将前面的表达式重复零次或多次。所有内容都在和处得到了很好的解释。链接线程中可用的链接。在很多情况下,要求分隔符后面有偶数个
    。换句话说,不要在两个
    :s之间拆分。(如果您正试图拆分CSV,那么CSV的某些方言可能仍不适用。)阅读此文?尝试粘贴正则表达式并阅读解释正则表达式中
    *
    的含义非常基本,应该在最基本的介绍中介绍。它允许将前面的表达式重复零次或多次。所有内容都在和处得到了很好的解释。链接线程中可用的链接。在很多情况下,要求分隔符后面有偶数个
    。换句话说,不要在两个
    :s之间拆分。(如果您正试图拆分CSV,那么CSV的某些方言可能仍然不适用。)