我真的是RegEx的主要新手,可以提供一些帮助。
我有一个包含大量URL和其他文本的长字符串,其中一个URL包含has / find /。即:
1. http://www.example.com/not/index.html
2. http://www.example.com/sat/index.html
3. http://www.example.com/find/index.html
4. http://www.example.com/rat/mine.html
5. http://www.example.com/mat/find.html
我会使用哪种RegEx来返回该列表中第3个的URL,但也不会返回第5个?我想基本上我正在寻找的是一种返回包含一组特定字母和/或按顺序的整个单词的方法。
TIA
答案 0 :(得分:2)
我认为你想要preg_match("%/find/%",$input);
或类似的。
编辑:要获得完整的一行,请使用:
preg_match("%^.*?/find/.*$%m",$input);
答案 1 :(得分:1)
我建议您使用RegExr生成正则表达式。
您可以输入样本列表(如上所示)并使用调色板创建RegExp并实时测试。该程序可在线获得,也可作为可下载的Adobe AIR软件包使用。
很遗憾,我现在无法访问他们的网站,因此我附上the AIR package of the downloadable version。
我真的推荐你这个,因为它帮助像我这样的RegExp新手设计了最复杂的模式。
然而,对于你的问题,我认为只是
\/find\/
如果你想获得是/否结果(即如果它包含或不包含/find/
),顺利进行,否则获得全线使用
.*\/find\/.*
答案 2 :(得分:0)
除了Kolink的回答,如果你想要正则表达式匹配整个URI:
绝不是 URI的详尽正则表达式,但是this is a good starting point。我在关键点提出了几个选项,例如.com
,.net
和.org
。实际上,由于缺乏一致性,你会很难将URI与正则表达式匹配,但你可以非常接近
来自上述链接的正则表达式:
/(https?:\/\/)?(www\.)?([a-zA-Z0-9-_]+)\.(com|org|net)\/(find)\/([a-zA-Z0-9-_]+)\.(html|php|aspx)?/is