正则表达式在第一场比赛中包括两场比赛
Regex includes two matches in first match
我有 this regex 试图找到单独的 STEP 行并将其分成三组参考编号、class 和属性:
#14=IFCEXTRUDEDAREASOLID(#28326,#17,#9,3657.6);
变成
[['14'], ['IFCEXTRUDEDAREASOLID'], ['#28326,#17,#9,3657.6']]
有时这些行有任意换行符,尤其是在属性之间,所以我在正则表达式中放了一些 \s 。然而,这会导致一个有趣的错误。该模式现在将两行匹配到每个匹配项中。
即使有换行符,我如何调整正则表达式使其只捕获一行?只是出于好奇,为什么它在第二行之后停止而不继续到最后一行?
你可以试试这个:
#(\d+)\s*=\s*([a-z0-9]+)\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+ 个其他字符比 ;
和 '
([^;']+
)
\);
- );
序列
否定字符 class 解决方案 适用于特定情况,但一旦使用 ([\s\S]*?)
捕获的文本包含否定字符,匹配就会失败。
我有 this regex 试图找到单独的 STEP 行并将其分成三组参考编号、class 和属性:
#14=IFCEXTRUDEDAREASOLID(#28326,#17,#9,3657.6);
变成
[['14'], ['IFCEXTRUDEDAREASOLID'], ['#28326,#17,#9,3657.6']]
有时这些行有任意换行符,尤其是在属性之间,所以我在正则表达式中放了一些 \s 。然而,这会导致一个有趣的错误。该模式现在将两行匹配到每个匹配项中。
即使有换行符,我如何调整正则表达式使其只捕获一行?只是出于好奇,为什么它在第二行之后停止而不继续到最后一行?
你可以试试这个:
#(\d+)\s*=\s*([a-z0-9]+)\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+ 个其他字符比;
和'
([^;']+
)\);
-);
序列
否定字符 class 解决方案 ([\s\S]*?)
捕获的文本包含否定字符,匹配就会失败。