我有一个很长的字符串,在这个字符串中的某个地方,有一个url。在这个例子中,这个URL是开头的。正则表达式来挑出一个长字符串的url部分
"http://localhost:1234/api/$metadata#this_entry_is_variable_and_can_exist_of_numbers_and_characters/$entity","Version":"AAAEEEIIU=""
我试着写在C#中的正则表达式这个特殊的字符串,下面的规则后,提取的网址:
- 的URL总是以http://或https://
- 的URL之后,端口有时指定,而不是总是
- 端口之后,存在一个路径,在该示例
/api
,但它可以是任何字符 - 的路径后,在此电子xample
/api
,它始终是/$metadata
- 的
/$metadata
后有一个主题标签#
之后的任何字符 - URL的最后一部分总是
/$entity
结尾的字符串,这是正则表达式我有拿出这么远:
(^http://\w+(\.\w+)*(:[0-9]+)?\/?(\/[.\^$metadata$(\#(\[a-zA-Z0-9)(\$(\entity$))]*).*?)
当LinqPad测试此,会出现以下问题:
- 如果字符串包含的URL多,没有匹配
- 它不严格验证上/ $元,它接受/ $ metadata1111
- 它不严格验证上/ $实体,它接受/ $ entity111
- 显然它不接受https://呢。
谁能给我一个提示,就继续下去,因为我坚持..
哇,是快!谢谢! –
@revo:只是一个小修改:正则表达式可能应该以'\ b'结尾,以避免[这种情况](https://regex101.com/r/4URxaU/2) –
这就是要点,但它并不明显可以在输入字符串中指定URL结尾。 @DmitryEgorov – revo