正则表达式查找字符串的最后一次出现在URL
我有这样的数据正则表达式查找字符串的最后一次出现在URL
|-> http://www.example.com/fr/page-name (09:00:13)
|-> http://www.example.com/fr/page-name (09:00:19)
|-> http://www.example.com/fr/page-name (09:01:41)
|-> http://www.example.com/en/page-name (09:02:29)
,我需要从列表中最后一个网址,以获取(fr|en)
。在这种情况下,'en'
。
我使用.Net和我已经试过了负向前看符号,我认为是找到en|fr
它不是后面en|fr
/(en|fr)/(?!/(en|fr)/)
/(en|fr)/(?!.*?/(en|fr)/)
,但我失去了一些东西,因为它的所有URL匹配。
任何帮助表示赞赏。
试试这个正则表达式:
[^$]+\/(en|fr)\/
说明:
-
[^$]+
- 匹配1次出现的任何字符不是end-of-the-string
。基本上,我们刚刚达到使用整个文本块的结束这 -
\/(en|fr)\/
- 它将会匹配任何en
或fr
月1日发生的/
从字符串的结尾包围(由于回溯)
或者,您可以简单地写入\/(en|fr)(?=\/.*$)
并关闭多行标志。
所需值存在于组1中的匹配。
非常感谢,这完美的作品。 –
如果它解决了您的问题,请不要忘记接受答案 – Gurman
正则表达式非常适合匹配字符串模式,但在某些情况下,它可能是矫枉过正。既然你可以将字符串转换为一个URI,然后得到URI的第一部分,我会用这条路线走:
'Placeholder variable for For/Each
Dim u As Uri
'Iterate through each URL
For Each url As String In urls.Split({Environment.NewLine}, StringSplitOptions.None)
'Split the current line by the space character, get the second item, and convert it into a URI
u = New Uri(url.Split(" "c)(1))
'Print the language which is the second segment of the URI
Console.WriteLine(u.Segments(1))
Next
小提琴:Live Demo
谢谢,但正如我所说的,我受到应用程序使用正则表达式的限制。 –
为什么你不反转你正在查找的字符串和你正在测试的字符串,并搜索第一次出现的字符串? – mikeb
这看起来像一个日志文件;每个网址都是自己的行吗?为什么不把最后一行解析出来呢?我们可能需要更多的上下文来解决您正在尝试解决的更大问题。 – hunteke
不确定正则表达式是这份工作最好的(甚至是非常好的)工具。 –