preg_match(#(?:([a-zA-Z-]+):)?(?://(?:([a-zA-Z0-9_!$&\'()*+,;=._~%-]+)(?::([a-zA-Z0-9_!$&\'()*+,;=._~%-]*))?@)?([a-zA-Z0-9-._]+)(?::([0-9]*))?)?([a-zA-Z0-9_!$&\'()*@+,:;=._~/%-]*)(?:\\?([0-9a-zA-Z!$&\'()*@+,:;=._~%-]*))?(?:\\#(.*))?#, $uri, $m));
上面的正则表达式用于匹配网址,结果应该是 m [1] = scheme m [2] = user m [3] = pass m [4] = host m [5] = port m [6] = path m [7] = queryString m [8] = fragment
除了queryString包含数组外,它运行良好 例如: ?AR [K1] = V1&安培; AR [K2] = V2
我的问题是: 1.正则表达式中尖锐#的含义是什么? 2.如何修改正则表达式使其与queryString include数组匹配
答案 0 :(得分:3)
答案 1 :(得分:2)
改为使用parse_str
:http://php.net/manual/en/function.parse-str.php
这完全符合您的要求并且是内置的,最重要的是,没有正则表达式(看看那个怪物):s。
要顺便回答你的问题,#
只是正则表达式的分隔符。
答案 2 :(得分:2)
答案 3 :(得分:1)
这个正则表达式似乎非常严格地根据RFC 3986调整URI的语法,实际上不允许query内的普通[
或]
:< / p>
query = *( pchar / "/" / "?" ) pchar = unreserved / pct-encoded / sub-delims / ":" / "@" unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" pct-encoded = "%" HEXDIG HEXDIG sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
现在,如果您还想允许这些字符,请将其用于现有正则表达式中的查询部分:
… (?:\\?([0-9a-zA-Z!$&\'()*@+,:;=._~%[\]-]*))? …