http((?!http).)*m3u8
正则表达式怎么控制匹配的字符串更近的一个
正则如何匹配最近的字符 正则如何匹配最近的两个字符
怎么控制只要离字符串b匹配更近一点的字符串a
解释
a.b,它将会匹配最长的以a开始,以b结束的字符串 a.?b匹配最短的,以a开始,以b结束的字符串 我想要的是结合体, 匹配最长 但是最后要的是以最后一个a结尾,最后一个b结尾的字符串
正则表达式,它能够匹配最长的以第一个 a
开始,以最后一个 b
结束的字符串。这种需求通常需要使用贪婪匹配来获取最长的匹配,但同时又要确保匹配的是最后一个 a
和最后一个 b
之间的内容。
在正则表达式中,你可以使用一些技巧来达到这个目的,例如使用负向前视断言来排除过多的 a
和 b
,只匹配最后一个符合条件的片段。下面是一个示例的正则表达式:
Copy Codea((?!a).)*b
正则表达式解释:
-
a
: 匹配字面字符 "a"。 -
((?!a).)*
: 这是一个贪婪匹配的子表达式,它会匹配任意字符,但是排除以 "a" 开头的字符序列。这样可以确保在最后一个a
之后,匹配的字符不会再包含a
。 -
b
: 匹配字面字符 "b"。
这个正则表达式的逻辑是:从第一个 a
开始,尽可能多地匹配字符,直到最后一个 b
结束。由于使用了负向前视断言 (?!a)
,保证了匹配的字符序列中不会再出现 a
,从而在文本中定位到最后一个 a
和 b
之间的内容。
示例应用:
例如,对于字符串 "aabcababcb"
,这个正则表达式将匹配 "abcb"
,即从第一个 a
到最后一个 b
之间的最长字符序列。
在 C# 中使用这个正则表达式,你可以像之前示例那样,使用 Regex
类进行匹配和提取。
using System; using System.Text.RegularExpressions; class Program { static void Main() { string input = "aabcababcb"; string pattern = @"a((?!a).)*b"; Regex regex = new Regex(pattern); Match match = regex.Match(input); if (match.Success) { string extractedString = match.Value; Console.WriteLine("Extracted string: " + extractedString); } else { Console.WriteLine("No matching string found."); } } } 这段代码将输出匹配到的最长符合条件的字符串 "abcb"。
应用
http.m3u8,它将会匹配最长的以http开始,以m3u8结束的字符串 http.?m3u8匹配最短的,以http开始,以m3u8结束的字符串 我想要的是结合体, 匹配最长 但是最后要的是以最后一个http结尾,最后一个http结尾的字符串
var url = request.Uri; var tet = ""; if (url != null && url.EndsWith(".m3u8")||url.EndsWith(".mp4")&& qflagurl==true) { tet = "webview2适配m3u8url捕获成功\n"; Sharing.setTips(tet); Match match = Regex.Match(url, @"http((?!http).)*m3u8", RegexOptions.Singleline); if (match.Success) { url = match.Value; //qflag3 = false; }