带有非法字符的 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), @"[?&amp;]placeid=([^&amp;]*)")?.Groups[1].Value 就可以了。或者,反斜杠可能需要在上面的代码中加倍。请注意,\u003d=\u0026&amp;。如果您提供了一个测试用例 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 的正则表达式 \\的主要内容,如果未能解决你的问题,请参考以下文章

根据正则表达式过滤非法的字符串

带有 JQuery 和正则表达式的输入掩码

将 URL 十六进制代码转换为字符的正则表达式

正则表达式 (C#):匹配 > < 或(非法 XML 字符)但仅当包含在引号内时

正则表达式 URL 帮助:单词或短语

jsp中如何过滤非法字符