我想使用PHP来检查,如果存储在$myoutput变量中的字符串包含有效的链接语法,或者它只是一个普通的文本.我正在寻找的功能或解决方案应该识别所有链接格式,包括具有GET参数的格式.
在许多网站上建议的实际查询字符串(使用CURL或file_get_contents()函数)的解决方案在我的情况下是不可能的,我想避免它.
我考虑过正则表达式或其他解决方案.
该FILTER_VALIDATE_URL过滤器似乎有一些无法验证非ASCII网址:
var_dump(filter_var('http://pt.wikipedia.org/wiki/', FILTER_VALIDATE_URL)); // http://pt.wikipedia.org/wiki/
var_dump(filter_var('http://pt.wikipedia.org/wiki/Guimarães', FILTER_VALIDATE_URL)); // false
Run Code Online (Sandbox Code Playgroud)
为什么没有正确验证最后一个URL?什么是可能的解决方法?运行PHP 5.3.0.
我也想知道在哪里可以找到FILTER_VALIDATE_URL验证过滤器的源代码.
我正在尝试使用正则表达式验证查询字符串.请注意,我不是要匹配值,而是验证其语法.我这样做是为了练习正则表达式,所以我很感激帮助而不是"使用这个lib",虽然看看它如何在lib中完成它会对我有所帮助,所以如果你有一个,请告诉我.
所以,这将是先决条件:
我已经相当远了,但是我在正则表达式中匹配时遇到的问题是等号和符号必须按特定顺序排列而不必重复匹配组.这是我到目前为止所得到的:
#^\?([\w\-]+((&|=)([\w\-]+)*)*)?$#
Run Code Online (Sandbox Code Playgroud)
它正确匹配?abc=123&def=345,但它也错误匹配例如?abc=123=456.
我可能会过度杀戮并做类似......
/^\?([\w\-]+=?([\w\-]+)?(&[\w\-]+(=?[\w\-]*)?)*)?$/
Run Code Online (Sandbox Code Playgroud)
...但我不想重复相同的匹配组.
我如何告诉正则表达式值之间的分隔符必须在重复匹配组之间迭代,&还是=不重复匹配组或灾难性的反向跟踪?
谢谢.
编辑:
我想澄清一点,这不适用于现实世界的实施; 为此,应该使用您的语言中最有可能的内置库.问这个问题是因为我想提高我的正则表达式技能,解析查询字符串似乎是一个有意义的挑战.
这种情况以前也有人问在这里,但答案都是PHP相关.是否有使用C#的类似且有效的解决方案?像特定的测试类或例程?我想解析www.google.com或google.com或mywebsite.net等...有或没有前缀.谢谢
php ×2
validation ×2
c# ×1
expression ×1
filter ×1
filter-var ×1
parsing ×1
regex ×1
string ×1
url ×1
utf-8 ×1