> 백엔드 개발 > PHP 튜토리얼 > 新手又有正则问题需要请教!

新手又有正则问题需要请教!

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
풀어 주다: 2016-06-23 13:55:55
원래의
911명이 탐색했습니다.

新手,在打书上的文章发布工具时,用正则匹配URL出了点问题。

$pattern = '/(http\:\/\/|https\:\/\/)?([a-zA-Z0-9-]+\.)+(com|cn|org|net)(\/[\w\%\&\=\'\"\?\/\.]*)?/';$string = 'http://demo.demo.baidu.com';preg_match_all($pattern,$string,$result);
로그인 후 복사

遍历$result的结果是
[code=php]
Array
(
[0] => Array
(
[0] => http://demo.demo.baidu.com
)
[1] => Array
(
[0] => http://
)

[2] => Array
(
[0] => baidu.
)
[3] => Array
(
[0] => com
)
[4] => Array
(
[0] =>
)
)
[/php]
第二个子表达式其实是匹配了’www.‘以及’baidu.‘,有两次匹配,但是返回的结果里只有一处匹配T.T
整个表达式是能够匹配整个URL的,但是我要用到第二个子表达式的两次匹配结果,现在只有一个,望各位指教问题出现在哪儿!
感谢!


回复讨论(解决方案)

(http\:\/\/|https\:\/\/)?(([a-zA-Z0-9-]+\.)+)+(com|cn|org|net)(\/[\w\%\&\=\'\"\?\/\.]*)?
로그인 후 복사

楼上大神解决。不过我感觉第二个子表达式后面不用加+

(http\:\/\/|https\:\/\/)?(([a-zA-Z0-9-]+\.)+)(com|cn|org|net)(\/[\w\%\&\=\'\"\?\/\.]*)?
로그인 후 복사

$pattern = '/(http\:\/\/|https\:\/\/)?((?:[a-zA-Z0-9-]+\.)+)(com|cn|org|net)(\/[\w%&=\'"?\/.]*)?/';$string = 'http://demo.demo.baidu.com';preg_match_all($pattern,$string,$result);
로그인 후 복사
Array(    [0] => Array        (            [0] => http://demo.demo.baidu.com        )    [1] => Array        (            [0] => http://        )    [2] => Array        (            [0] => demo.demo.baidu.        )    [3] => Array        (            [0] => com        )    [4] => Array        (            [0] =>         ))
로그인 후 복사

其实我是想用做一个URL添加a标签的函数,要用preg_replace()结合模式修正符e,在replacement参数里要调用到一个函数,给这个函数传入匹配到的字符串也就是URL,书上写的是urlCut('\\1\\2\\3\\4'),我不熟悉也就跟着用这个方法传入了。一开始就出现了最上面那个问题。用了上面大神的方法解决之后是没问题的,但是大神提醒查了手册之后,发现可以直接传入\\0,这也就省了很多事了。万万没想到啊~
再次感谢二位!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿