我正在尝试创建一个捕获以下字符串的正则表达式:
returnedData=dfsavdasvfdvdvvjwfwhvfwjhfvwjhevfwjvfw04040000N.sdfsgs.sfgakhvsafjhafj ksajbd 234.234 bfsdf sudhfkusa 77907 23 gfksahgkf bkhkjakjsf - CB123214124
但我希望在中间的数字(04040000)之后捕获它。问题是我使用的正则表达式是把它作为一个整体来捕获的:
(returnedData)+([A-Za-z0-9=:\s\-@+?\.])*(-\s)(CB)
我想要捕获的字符串是:N.sdfsgs.sfgakhvsafjhafj ksajbd 234.234 bfsdf sudhfkusa 77907 23 gfksahgkf bkhkjakjsf - CB
这必须在不支持Lookbehind的IBM LogDNA中使用。因此,限制。需要在YAML文件中输入正则表达式,因此不接受任何代码,只能使用正则表达式
2条答案
按热度按时间gcuhipw91#
使用这种模式
如果你使用的是
JS
,你可以匹配字符串并使用第一个组,就像我在console.log()
中使用的那样:结果是:
N.sdfsgs.sfgakhvsafjhafj ksajbdfksabfkasbfsdf sudhfkusagfksahgkf bkhkjakjsf - CB
dfty9e192#
您可以修改正则表达式以使用肯定的后向Assert,该Assert仅在前面有数字“04040000”时才匹配“-”字符序列。下面是修改后的正则表达式:
说明:
returnedData=
匹配文字字符串“returnedData=”[A-Za-z0-9=:\s\-@+?\.]*?
匹配可能出现在目标字符串之前的任何字符。*?
使量词变得懒惰,以便它匹配满足模式其余部分所需的最小字符数。(?<=04040000\s- )
是一个肯定的后看Assert,只有在前面有“04040000”时才匹配“-”序列。CB\S+
匹配文本字符串“CB”,后跟一个或多个非空格字符(目标字符串)。请注意,
\S
字符类匹配任何非空格字符。如果要在目标字符串中包含空格,可以将\S+
替换为[A-Za-z0-9\s]+
。