了解在拆分

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

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

检查documentation of the split method可以理解,在括号之间有一个正则表达式字符串。

检查documentation of regexp时,事情变得更加棘手:

将表达式拆分成我在the said documentation中找到的片段:

  1. ,-我们期望字符串被分隔的字符
  2. (-在第16点关闭
  3. ?=-(?= X)X,通过零宽度正向超前搜索
  4. (-在第11点关闭
  5. [^\"]-除“ ” »
  6. 外的任何字符
  7. *-我不明白
  8. \"-字符«»
  9. [^\"]-再次,如第5点,除«»
  10. 以外的任何字符
  11. *-同样,就像第6点一样,我不确定我能得到这个
  12. \"-同样,就像第7点一样,字符«»
  13. )-关闭从第4点开始的表达式
  14. *-这是某种逻辑与吗?
  15. [^\"]-与第5点和第8点一样,除了“ »
  16. 以外的任何字符
  17. *-与第6、9和12点相同
  18. $-指示行尾的边界匹配器
  19. )-关闭从第2点开始的表达式

我不正确地理解第3点,因为我不理解什么是前瞻。我可以使用this answer来了解它的要点,它使用this website作为参考,在这里我们可以了解正面和负面的前瞻:

  

负向超前是必不可少的,如果您想匹配不跟其他的内容。在解释字符类时,本教程说明了为什么不能使用否定的字符类来匹配q而不是u。负前瞻提供了解决方案:q(?!u)。否定的超前构造是一对圆括号,其中圆括号开头是问号和感叹号。在前瞻内部,有一个琐碎的正则表达式u。

     

正向超前工作原理相同。 q(?= u)匹配后跟au的aq,不使u成为匹配项。正向超前构造是一对括号,括号内是开括号。一个问号和一个等号。

     

您可以在超前使用任何正则表达式(但不能向后看,如下所述)。可以在lookahead内部使用任何有效的正则表达式。

好,现在第3点已经理解为种类,到目前为止,我得到的是我们正在尝试使用字符«,»(第1点),然后是表达式([^\"]*\"[^\"]*\")*[^\"]*$

在这一点上,我被认为是一个问题: *如何在Java的正则表达式中凝聚表达式?

查看documentation时,我发现了它的三个实例,但仍然没有得到它:

  • 在贪婪量词中,X * X等于或大于零次;
  • 在勉强的量词中,X *? X,零次或多次
  • 在所有数量词中,X * + X零次或多次

如果我的推论有误,请纠正我,并感谢您的宝贵时间。

yonghuzhuxiao 回答:了解在拆分

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2950982.html

大家都在问