PHP preg_replace正则表达式

时间:2011-03-04 10:20:54

标签: php regex preg-replace

如何使用正则表达式使用preg_replace删除给定字符之后的任何内容以及给定字符之后的任何内容?当然,这可以通过爆炸和条带化等许多其他方式来完成。但我对preg_replace和regex感到好奇。

所以我在下面的字符串中唯一需要的是 03b 并删除/和斜杠(/)之后和/和点(。)

之后的所有内容
$string = 'rmbefore/03b.rmafter'

提前致谢!

4 个答案:

答案 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)

对于这种情况你不需要正则表达式,它会被杀死。您只需使用substrstrpos函数中的内置版本。

$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);