我有一个文本,例如:
$ descrizione ="电话+ 39.1234.567899 asd.test@testwebsite.com
www.testwebsite.com "
我希望得到三个不同的变量:
" + 39.1234.567899"
" asd.test@testwebsite.com"
" www.testwebsite.com &#34 ;.
要检查文本是否包含电子邮件,我使用正则表达式并编写此代码:
$regex = '/[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})/';
if (preg_match($regex, $descrizione, $email_is)) {
for($e = 0; $e < count($email_is) ; $e++){
if(strpos($email_is[$e], "@") !== false){
$linkEmail = $email_is[$e];
}
}
}
现在,我想找到网站网址,所以我试着写:
$regex = '/[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi';
if( preg_match($regex, $descrizione, $matches)){
$linkWebsite = $matches[0];
}
但是preg_match返回false。我使用网站http://regexr.com/控制正则表达式并且它是正确的,所以我不明白为什么返回总是错误的。问题出在哪里?
我尝试使用"/[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/"
但我遇到了同样的问题,我尝试用trycatch检查错误,但它没有返回错误。
最后我想找一个电话号码,但我不知道怎么写正则表达式
请问有人可以帮助我吗?
答案 0 :(得分:0)
你的正则表达式失败了,因为它有问题。您已使用斜杠转义斜杠(/
)。你应该使用反斜杠:
[-a-zA-Z0-9@:%_\+.~#?&\/=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&\/=]*)?
由于regexr使用JS正则表达式,它不会抱怨,但如果你在regex101上尝试选择php,你就可以轻松检测到这些错误。
关于电话号码的正则表达式 - 搜索! E.g https://stackoverflow.com/search?q=%5Bregex%5D+phone+number
答案 1 :(得分:0)
我找到了解决办法,我希望这可以帮助某人
preg_match 会返回仅第一个结果,而不是它找到的所有结果。
因此,如果我使用像regex101这样的网站检查正则表达式,它会返回所有匹配的更正结果,但如果我在php中使用相同的正则表达式,它只返回一个。
正则表达式选项&#34; g&#34; (全局=首次匹配后不返回)对应于 preg_match_all 功能