首页 > 解决方案 > 使用转义管道分隔符解析正则表达式

问题描述

我试图解析

|123|create|item|1497359166334|Sport|Some League|\|Team\| vs \|Team\||1497359216693|

使用正则表达式(https://regex101.com/r/KLzIOa/1/

我目前有

[^|]++

哪个正确解析所有内容,除了\|Team\| vs \|Team\|

我希望这被解析为|Team| vs |Team|

如果我将正则表达式更改为

[^\\|]++

它单独解析团队,而不是与转义管道一起解析

基本上我想解析管道之间的字段,但是,如果有任何转义的管道,我想捕获它们。所以以我的例子我希望

["123", "create", "item", "1497359166334", "Sport", "Some League", "|Team| vs |Team|", "1497359216693"]

标签: regex

解决方案


您可以交替使用:

  • \\.- 文字反斜杠后跟任何内容,或
  • [^|\\]+- 除了管道或反斜杠之外的任何内容
(?:\\.|[^|\\]+)+

https://regex101.com/r/KLzIOa/2

请注意,不需要所有格量词,因为不会发生回溯。

如果您还想将\|s替换为|s,然后再执行此操作:匹配\\\|并替换为|.


推荐阅读