提问人:Alex Bäumler 提问时间:12/22/2022 最后编辑:CinCoutAlex Bäumler 更新时间:12/22/2022 访问量:71
仅当至少 3 个字符时,正则表达式才会匹配 2 个字符之间的所有内容
RegEx match everything between 2 characters only if at least 3 characters
问:
我正在尝试匹配“xAA”和“xFF”之间的所有字符,但前提是它们之间至少有 4 个字符。有没有一种简单的方法可以用正则表达式做到这一点?
例如,应匹配 xAA-12345-xFF,但应忽略 xAA-1-xFF。
我的正则表达式目前如下所示:
"(?<=\xAA).*(?=\xFF)"
这确实匹配了这些字符之间的所有内容,但我找不到一种方法来仅在它们之间至少有 4 个字符的情况下进行匹配,有人可以帮我吗?
答:
0赞
Martin C.
12/22/2022
#1
快速而肮脏的黑客可能是:
"xAA....*xFF"
这需要三个 () 字符,后跟 0 个或多个 ()。...
.*
评论
0赞
Wiktor Stribiżew
12/22/2022
这不适用于具有多个匹配项的字符串,因为它将从最左边开始匹配。\xAA
0赞
Martin C.
12/22/2022
@WiktorStribiżew:我认为对于上述问题,这应该仍然有效吗?为什么这会是多场比赛的问题?但是我简化了正则表达式,但也许我没有完全理解源代码和预期的匹配行为。
0赞
CinCout
12/22/2022
#2
这样做:
xAA\S{4,}xFF
\S{4,}
匹配至少 4 个非空格字符。
0赞
Albina
12/22/2022
#3
(?<=xAA-)[0-9]{4,}(?=\-xFF)
如果只有数字,则从中收回 12345xAA-12345-xFF
(?<=xAA-)[0-9a-zA-Z]{4,}(?=\-xFF)
如果字母或数字是可能的
评论
x
x
-<digits>-
xAA
xFF
(?<=xAA-)\d{4,}(?=-xFF)
(?<=\xAA\s*)(?:(?!\xAA).)*?(?=\s*\xFF)