正向贪婪的后视
Positive Lookbehind greedy
我想我对 Regex 中正后视的工作原理有一些误解,这里有一个例子:
12,2 g this is fully random
89 g random string 2
0,6 oz random stuff
1 really random stuff
假设我想匹配测量单位之后的所有内容,所以我想要“这是完全随机的”、“随机字符串 2”、“随机的东西”和真正的“随机的东西”。
为此,我尝试了以下模式:
(?<=(\d(,\d)?) (g|oz)?).*
但是作为“?”表示 0 或 1,在这种情况下,模式似乎优先考虑 0 而不是 1 - 所以我得到:
但是测量单位必须保持“可选”,因为它不必在字符串中(参见第四个实例)...
知道如何处理这个问题吗?谢谢!
查看它匹配的位置以了解发生了什么会更容易。断言 (?<=(\d(,\d)?) (g|oz)?)
在直接左边是 (\d(,\d)?)
和可选 (g|oz)?
的位置为真
模式从左到右,断言在多个地方为真。但是在它遇到的第一个地方,它匹配 .*
意思是任何字符的 0+ 次,并且会匹配到行尾。
查看排名on regex101
您可能会做的是匹配数字部分并使 space 后跟 g
或 oz
可选,并为第二部分使用捕获组。
\d+(?:,\d+)?(?: g| oz)? (.*)
我想我对 Regex 中正后视的工作原理有一些误解,这里有一个例子:
12,2 g this is fully random
89 g random string 2
0,6 oz random stuff
1 really random stuff
假设我想匹配测量单位之后的所有内容,所以我想要“这是完全随机的”、“随机字符串 2”、“随机的东西”和真正的“随机的东西”。
为此,我尝试了以下模式:
(?<=(\d(,\d)?) (g|oz)?).*
但是作为“?”表示 0 或 1,在这种情况下,模式似乎优先考虑 0 而不是 1 - 所以我得到:
但是测量单位必须保持“可选”,因为它不必在字符串中(参见第四个实例)...
知道如何处理这个问题吗?谢谢!
查看它匹配的位置以了解发生了什么会更容易。断言 (?<=(\d(,\d)?) (g|oz)?)
在直接左边是 (\d(,\d)?)
和可选 (g|oz)?
模式从左到右,断言在多个地方为真。但是在它遇到的第一个地方,它匹配 .*
意思是任何字符的 0+ 次,并且会匹配到行尾。
查看排名on regex101
您可能会做的是匹配数字部分并使 space 后跟 g
或 oz
可选,并为第二部分使用捕获组。
\d+(?:,\d+)?(?: g| oz)? (.*)