使用正则表达式从不以注释符号开头的行中提取数字

Extract numbers from line not starting with comment symbol using regex

我正在尝试替换所有不在评论部分的数字。这是要修复的文件示例:

/* 2018-01-01 06:00:55 : realtime(0.002) --status(10)-- ++numretLines(0)++  --IP(192.168.1.5) PORT(22)-- queryNo(2)  comment[TO: Too much time]  TYPE[QUERY 4.2]  */
select count(*) from table where id1 = 41111 and id2 = 221144
GO

基本上,我想替换不以 "/*" 开头的字符串中的数字。

我想出了以下正则表达式:/^(?!\/\*)(?:.+\K(\d+?))/gmU

但我只能提取不以 "/*" 开头的每一行的第一个数字。我如何扩展它以获得这些行的所有数字?

谢谢!

假设您的正则表达式引擎(您尚未告知)支持 look behindlook ahead,您可以使用此正则表达式:

(?<!^\/\*.*)(?:(?<=\s)\d+(?=\s))+

正则表达式首先使用 negative look behind,查找 start of line,然后是 slashstar

然后它为 White Space 创建一个新的 negative look behind,然后是任意数量的 digits,然后是 negative look aheadWhite Space。该组是 repeated any number of times

您需要设置 global'multiline' 标志。

正则表达式跳过未被白色包围的数字 Space(例如 'id1'

根据Wiktor Stribiżew评论,我使用\/\*.*?\*\/(*SKIP)(*F)|-?\b\d+(\.\d+)?提取数字,包括小数和负值。