我的第一个问题
我有一个日志文件,其中包含多个与命中类似的字符串:
Region: AR
OnlineID: Atl_Tuc
---Start---
FIFA 18 Legacy Edition
---END---
Region: FR
OnlineID: jubtrrzz
---Start---
FIFA 19
Undertale
Pro Evolution Soccer™ 2018
---END---
Region: US
OnlineID: Cu128yi
---Start---
KINGDOM HEARTS HD 1.5 +2.5 ReMIX
---END---
Region: RO
OnlineID: Se116
---Start---
Real Farm
EA SPORTS™ FIFA 20
LittleBigPlanet™ 3
---END---
Region: US
OnlineID: CAJ5Y
---Start---
Madden NFL 18: G.O.A.T. Super Bowl Edition
---END---
我想查找所有包含FIFA(FIFA作为字符串)的匹配。以国际足联为例,我需要查找包含某些字符串的所有匹配。
我能找到的最后一件事是这个正则表达式: (?s)(?=^\r\n)(.*?)(fifa)(.*?)(?=\r\n\r\n)
但是,当我用这个,它选择所有的命中包括国际足联没有命中,直到找到一击国际足联,所以有时选择1次多打这样的。
第二个问题是我不能.*
在(fifa)bcz中使用它会导致选择错误。
我现在能做什么?
正确的输出应如下所示:
Region: AR
OnlineID: Atl_Tuc
---Start---
FIFA 18 Legacy Edition
---END---
Region: FR
OnlineID: jubtrrzz
---Start---
FIFA 19
Undertale
Pro Evolution Soccer™ 2018
---END---
Region: RO
OnlineID: Se116
---Start---
Real Farm
EA SPORTS™ FIFA 20
LittleBigPlanet™ 3
---END---
您可以使用
(?si)(?:^(?<!.)|\R{2})\K(?:(?!\R{2}).)*?\bfifa\b.*?(?=\R{2}|\z)
细节
(?si)
-s
使.
匹配换行符chara(与.
match newline ON相同)和不区分大小写的match ON(?:^(?<!.)|\R{2})
-匹配文件的开头或两个换行序列\K
-省略匹配的换行符(?:(?!\R{2}).)*?
-任何字符,出现0次或多次,但尽可能少,不启动双行换行序列\bfifa\b
-整个词 fifa
.*?
-最少0个字符(?=\R{2}|\z)
-最多双倍换行符或文件结尾。现在,如果您想将某段与匹配fifa
,然后20
在其某些行上进行匹配,请使用
(?si)(?:^(?<!.)|\R{2})\K(?:(?!\R{2}).)*?(?-s:\bfifa\b.*\b20\b).*?(?=\R{2}|\z)
的(?-s:\bfifa\b.*\b20\b)
是,其中调节基团.
停止匹配换行符,它整个单词匹配fifa
,则比换行符字符等,尽可能多的,然后任何0+字符20
作为一个整体词。
请参阅此正则表达式演示。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句