正则表达式在第一场比赛中包括两场比赛



我有这个正则表达式,它试图找到单个 STEP-lines 并将其分为参考号、类和属性的三个集合:

#14=IFCEXTRUDEDAREASOLID(#28326,#17,#9,3657.6);

成为

[['14'], ['IFCEXTRUDEDAREASOLID'], ['#28326,#17,#9,3657.6']]

有时这些行有任意换行符,尤其是在属性之间,所以我在正则表达式中放了一些 \s。然而,这会产生一个有趣的错误。现在,该模式将两行匹配到每个匹配项中。

如何调整正则表达式以仅捕获一行,即使它们有换行符?只是出于好奇,为什么它在第二行之后停止而不持续到最后一行?

您现在每次都匹配 2 行的原因是s匹配任何空格,如果匹配一行后有换行符,s*将全部抓取。

/^#(d+)s*=s*([a-zA-Z0-9]+)s*(((?:'[^']*'|[^;'])+));/gm

查看此正则表达式演示

详情

  • ^ - 行的开头
  • # - 哈希符号
  • (d+) - 第 1 组:一个或多个数字
  • s*=s* - 用可选空格括起来的=
  • ([a-zA-Z0-9]+) - 第 2 组捕获 1+ 字母数字
  • s*( - 0+ 空格和(
  • ((?:'[^']*'|[^;'])+) - 第3组捕获'...'子字符串('[^']*',不允许内部')或(|)除;'以外的1+字符([^;']+
  • ); - );序列

Maverick_Mrt建议的否定字符类解决方案适用于特定情况,但是一旦使用 ([sS]*?) 捕获的文本包含否定字符,匹配将失败。

你可以试试这个:

#(d+)s*=s*([a-z0-9]+)s*([^;]*);

您更新的链接

最新更新