gpt4 book ai didi

c# - 从或正则表达式组中获取第一个匹配项

转载 作者:行者123 更新时间:2023-11-30 16:45:23 24 4
gpt4 key购买 nike

我正在尝试构建匹配 URL 中任何协议(protocol)的正则表达式

(?:https?|ftp|\w{2,7})://

但我希望如果存在“http”、“https”、“ftp”,它将采用它们,而不是最长的匹配,例如:

"hdhttp://"

我用的是re2,所以不能向前看也不能向后看

最佳答案

RE2 特定答案:

因为在 RE2 中你不能使用环视,你必须拆分模式并使用两个。一种是 (https?|ftp)://,如果找不到匹配项,请使用 \w{2,7}://。或者,使用您的正则表达式,然后检查匹配项是否包含 http://https://ftp://,如果是,并且匹配值的长度大于这些字符串,您需要使用这些值而不是匹配。

.NET相关回答

您可以使用否定前瞻来限制更通用的替代方案:

(?:https?|ftp|(?!\w*(?:https?|ftp):)\w{2,7})://
^^^^^^^^^^^^^^^^^^^^^^

参见 regex demo

如果 \w{2,7} 匹配,(?!\w*(?:https?|ftp):) 否定前瞻将导致匹配失败一个 2 到 7 个字符的子字符串,在 之前以 httphttpsftp(如果需要添加更多)结尾>:

在 .NET 中,您还可以为此使用负向后视(它支持那里的未知宽度模式):

(?:https?|ftp|\w{2,7}(?<!https?|ftp))://
^^^^^^^^^^^^^^^

查看 .NET regex demo

关于c# - 从或正则表达式组中获取第一个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42237846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com