让我们说我可以有这样的字符串:
^(www.|)mysite1.com$
^(.*)mysite2.com(.*)$
^(www\.|)mysite3\.com$
如何只获得此类字符串的 mysite1 , mysite2 或 mysite3 部分。我尝试使用以下方法将非字母数字部分设置为空字符串:
preg_replace("/[^A-Za-z0-9]/", '', $mystring);
但那会让我回头
mysite1com
mysite2com
mysite3com
提前致谢。
答案 0 :(得分:1)
您可能会使用preg_match代替preg_replace并使用例如此正则表达式:
匹配
\^ # Match ^ \( # Match ( [^)]+ # Match not ) one or more times \) # Match ) \K # Reset the starting point of the reported match [A-Za-z0-9]+ # Match one or more upper/lowercase character or digit
例如:
preg_match("/\^\([^)]+\)\K[A-Za-z0-9]+/", "^(www.|)mysite1.com$", $matches);
echo $matches[0];
使用preg_replace时,一种方法可能是使用3个捕获组,其中您要保留的值位于第二组中。
在替换中,您将使用$2
:
(\^\([^)]+\))([A-Za-z0-9]+)(.*)
preg_replace("/(\^\([^)]+\))([A-Za-z0-9]+)(.*)/", '$2', $mystring);