0

假设我有一个字符串,我只想匹配 value 为空的部分而不是 value 存在的部分?例如: &lang=&val=1233 我只需要 &lang 而不需要 &val 因为它有实际价值?我有这个

&(.+)=(?!\s\S) 与字符串中的 &lang=&val= 匹配的正则表达式。谁能帮我吗

4

4 回答 4

1

使用以下正则表达式:

(?:(?<=\?)|&)[^=]+=(?=&|$)

可以解释为:

  • (?: ....):非捕获(不组),根据您的目的可能不需要。
  • \?: 转义?以匹配?字面意思。
  • (?<=\?): 意思是“前面有?”:?不包括在结果中。
  • (?=&|$): 意思是“后跟&”或~在输入的末尾”。

以下是 Python 交互式 shell 中的示例测试:

>>> pattern = r'(?:(?<=\?)|&)[^=]+=(?=&|$)'
>>> re.findall(pattern, '&lang=&val=')
['&lang=', '&val=']
>>> re.findall(pattern, '&lang=&val=1233')
['&lang=']
>>> re.findall(pattern, '&lang=&val=&val2=123&val3=')
['&lang=', '&val=', '&val3=']
>>> re.findall(pattern, '?lang=&val=&val2=123&val3=')
['lang=', '&val=', '&val3=']
>>> re.findall(pattern, '?lang=blah&val=&val2=123&val3=')
['&val=', '&val3=']
>>> re.findall(pattern, 'www.html.com?user=&lang=eng&code=.in')
于 2013-07-15T14:01:48.413 回答
0

你的意思是

(&|?)([^&=]+)=(&|$)

(如果需要,可以使用非捕获组)

但我只会构建所有查询字符串参数的哈希并选择没有值的键。这更便宜。

于 2013-07-15T13:59:38.597 回答
0

尝试这个:

[?&]([^&]+)=(&|$)

第一组将具有您的参数的名称。

请注意,此正则表达式还将捕获一个空的第一个参数(val1in foo.php?val1=&val2=ok

于 2013-07-15T14:01:59.213 回答
0

试试这个:

(&([^=]+))=(?=&)
于 2013-07-15T14:03:50.013 回答