1

我希望使用正则表达式来解析 URL 以获取 url 的特定部分,如果我找不到模式则什么都没有。
一个网址示例是

/te/file/value/jifle?uil=testing-cdas-feaw:jilk:&jklfe=https://value-value.jifels/temp.html/topic?id=e997aad4-92e0-j30e-a3c8-jfkaliejs5#c452fds-634d-f424fds-cdsa&bf_action=jildape

我希望得到粗体字。

目前我正在使用正则表达式“ d=([^#]*)”但问题是我也在这种模式的 url 上运行:我得到了它的粗体部分

/te/file/value/jifle?uil=testing-cdas-feaw:jilk:&jklfe=https://value-value.jifels/temp.html/topic?id=e997aad4-92e0-j30e-a3c8-jfkaliejs5&bf_action=jildape

我希望它没有与此 url 匹配的内容,因为它不包含 #

4

3 回答 3

0
regex = "id=([\\w-])+?#"

假设 'id=' 和 '#' 之间的所有内容都在该字符类中(即如果一个 '&'在那里,正则表达式将失败)。

id=

-自我解释,这寻找'id ='的完全匹配

([\\w-])

- 这定义了字符类并将其分组。\w 是转义的 \w。'\w' 是来自 java 的预定义字符类,等于 [a-zA-Z_0-9]。由于您示例中的假定模式,我在此类中添加了“-”。

+?

- 这是一个不情愿的量词,它寻找正则表达式的最短匹配。

#

- 正则表达式的结尾,我们正在寻找匹配模式的最后一个字符。


如果您希望获取 'id=' 和它后面的第一个 '#' 之间的每个字符,以下将起作用,它使用与上面相同的逻辑,但将字符类替换为[\\w-]匹配.任何内容。

regex = "id=(.+?)#"
于 2012-12-07T18:16:05.723 回答
0

正则表达式不是一个神奇的工具,你应该总是因为问题涉及字符串而使用它。在这种情况下,您的语言可能有一个工具可以为您分解 URL。在 PHP 中,这是parse_url(). 在 Perl 中,它是 URI::URL 模块。

对于这样的常见问题,您几乎应该总是更喜欢现有的、经过充分测试的解决方案,而不是自己编写。

于 2012-12-07T16:31:23.057 回答
0

所以你想匹配 id 参数的值,但前提是它有一个包含“#”符号的尾随部分(不匹配“#”或后面的内容)?

不知道您正在使用哪种风格的正则表达式的细节,例如:

id=([^#&]*)#
于 2012-12-07T16:31:54.930 回答