只获取正则表达式字符串的字母数字部分

时间:2018-03-02 20:37:32

标签: php regex

让我们说我可以有这样的字符串:

^(www.|)mysite1.com$
^(.*)mysite2.com(.*)$
^(www\.|)mysite3\.com$

如何只获得此类字符串的 mysite1 mysite2 mysite3 部分。我尝试使用以下方法将非字母数字部分设置为空字符串:

preg_replace("/[^A-Za-z0-9]/", '', $mystring);

但那会让我回头

mysite1com
mysite2com
mysite3com

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可能会使用preg_match代替preg_replace并使用例如此正则表达式:

\^\([^)]+\)\K[A-Za-z0-9]+

匹配

\^           # 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];

Demo

使用preg_replace时,一种方法可能是使用3个捕获组,其中您要保留的值位于第二组中。 在替换中,您将使用$2

(\^\([^)]+\))([A-Za-z0-9]+)(.*)

preg_replace("/(\^\([^)]+\))([A-Za-z0-9]+)(.*)/", '$2', $mystring);

Demo