解析特定参数值的URL

时间:2012-12-07 16:25:46

标签: regex

我希望使用正则表达式解析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=([^#]*)”,但问题是我也在这个模式的网址中运行: 而我正在获得它的大胆部分

/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

我希望它没有此网址的匹配项,因为它不包含#

3 个答案:

答案 0 :(得分:0)

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

你应该几乎总是喜欢现有的,经过良好测试的解决方案,而不是自己编写这样的常见问题。

答案 1 :(得分:0)

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

不知道你正在使用什么样的正则表达式的具体细节,如下:

id=([^#&]*)#

答案 2 :(得分:0)

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

这将抓住'id ='和'#'之间的所有字符类[a-zA-Z_0-9-],假设'id ='和'#'之间的所有内容都在该字符类中(即如果是'&'就在那里,正则表达式会失败)。

id=

- 自我解释,这会查找'id ='

的完全匹配
([\\w-])

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

+?

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

#

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

<小时/> 如果你想抓住'id ='和它后面的第一个'#'之间的每个字符,下面的代码将起作用,它使用与上面相同的逻辑,但用{{1}替换字符类[\\w-] },匹配任何东西。

.