带有非法字符的 URL 的正则表达式 \\
Posted
技术标签:
【中文标题】带有非法字符的 URL 的正则表达式 \\\\【英文标题】:Regex for a URL with illegal characters \\带有非法字符的 URL 的正则表达式 \\ 【发布时间】:2021-12-17 18:26:14 【问题描述】:来自以下字符串:
google.com/local/reviews?placeid\\u003dChIJ070npYRaeEgRZNoxwuYYrew\\u0026q\\u003d
提取u003dChIJ070npYRaeEgRZNoxwuYYrew
虽然这个值每次都会改变。
我试过了
Regex r = new Regex(@"("(?<=\placeid\\\s+)\pL+");
这不起作用。
我因忽略了我对正则表达式的了解而感到内疚,所以如果这太容易了,我深表歉意。
【问题讨论】:
该文本是字符串文字还是纯文本? 这是我将使用正则表达式的源代码的一部分。 因为\p
和\pL
不行,你只需要var res = Regex.Match(text, @"placeid\\u003d(.*?)(?=\\u0026q|$)")?.Groups[1].Value
。但可能您需要使用Regex.Unescape(text)
,而不仅仅是text
,然后var res = Regex.Match(Regex.Unescape(text), @"[?&]placeid=([^&]*)")?.Groups[1].Value
就可以了。或者,反斜杠可能需要在上面的代码中加倍。请注意,\u003d
是 =
,\u0026
是 &
。如果您提供了一个测试用例 sn-p,它将更快、更有信心地回答您的问题。
【参考方案1】:
字符串中没有要与\s+
匹配的空格字符,并且有2 个反斜杠。
使用\pL+
只匹配任何字母,并且您想要的字符串还包含数字。
(?<=placeid\\\\\s*)[\pL\pN]+
Regex demo
例如
string pattern = @"(?<=placeid\\\\\s*)[\pL\pN]+";
string input = @"google.com/local/reviews?placeid\\u003dChIJ070npYRaeEgRZNoxwuYYrew\\u0026q\\u003d";
Match m = Regex.Match(input, pattern);
Console.WriteLine(m.Value);
输出
u003dChIJ070npYRaeEgRZNoxwuYYrew
【讨论】:
以上是关于带有非法字符的 URL 的正则表达式 \\的主要内容,如果未能解决你的问题,请参考以下文章