如何使用正则表达式使用preg_replace删除给定字符之后的任何内容以及给定字符之后的任何内容?当然,这可以通过爆炸和条带化等许多其他方式来完成。但我对preg_replace和regex感到好奇。
所以我在下面的字符串中唯一需要的是 03b 并删除/和斜杠(/)之后和/和点(。)
之后的所有内容$string = 'rmbefore/03b.rmafter'
提前致谢!
答案 0 :(得分:5)
您可以在preg_replace中使用反向引用来执行此操作:
preg_replace('#.*/([^\.]+)\..*#', '$1', $input);
这会搜索除斜杠之外的任何内容,然后将以下字符串中的多个点放在一个点上,将其放在第1组(即围绕它的'()'),然后是一个点和其他内容并替换它与组1的内容(括号内的表达式,在您的示例中应为“03b”)。这是一个关于正则表达式的好网站:http://www.regular-expressions.info/php.html。
希望这有帮助。
答案 1 :(得分:3)
$s = preg_replace("#^.*/(.*?)\\..*$#","$1",$string)
说明:
^ matches start of string
.* matches a string of arbitrary characters (greedy)
/ matches the /
(.*?) matches a string of arbirtrary characters (non-greedy)
\. matches a dot
.* matches a string of arbitrary characters
$ matches end of string
答案 2 :(得分:2)
对于这种情况你不需要正则表达式,它会被杀死。您只需使用substr和strpos函数中的内置版本。
$from = strpos($string, '/') + 1;
$to = strpos($string, '.');
echo substr($string, $from, $to - $from);
// echos 03b
因为你可以在一行中做到这一点,上面只是为了清楚
echo substr($string, strpos($string, '/') + 1, strpos($string, '.') - strpos($string, '/') - 1);
答案 3 :(得分:0)
$string = preg_replace('~^.*/(.*?)\..*$~',"$1",$string);