我希望使用正则表达式解析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
我希望它没有此网址的匹配项,因为它不包含#
答案 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-]
},匹配任何东西。
.