我需要从 URL 中提取一个变量,或者如果该变量不存在则获取一个空字符串。
伪代码:
String foo = "http://abcdefg.hij.klmnop.com/a/b/c.file?foo=123&zoo=panda";
String bar = "http://abcdefg.hij.klmnop.com/a/b/c.file";
当我运行我的正则表达式时,我想在第一种情况下得到 123,在第二种情况下得到空字符串。
我正在尝试用它来替换 .*?foo=(.*?)&?.*
将其替换为 $1
但当 foo= 不存在时,这不起作用。
我不能只是进行匹配,它必须是替换。
最佳答案
你可以试试这个:
[^?]+(?:\?foo=([^&]+).*)?
如果有参数并且第一个参数名为“foo”,则其值将在组#1中捕获。如果没有参数,正则表达式仍然会成功,但我无法预测当您访问捕获组时会发生什么。一些可能性:
- 它将包含一个空字符串
- 它将包含一个空引用,该引用将自动转换为
- 空字符串
- “null”一词
- 您的应用将抛出异常,因为第 1 组没有参加比赛。
此正则表达式与您提供的示例字符串匹配,但如果参数列表不包含“foo”,或者“foo”不是第一个参数,则它将不起作用。假设捕获组工作正常,这些选项也可以容纳。
关于regex - 使用正则表达式从 url 中提取查询字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1225392/