2011-03-04 128 views
1

如何使用正则表达式与preg_replace函数在给定字符后给定的人物和事情之前删除任何东西?当然,这可以通过许多其他方式完成,例如爆炸和剥离字符串。但我很好奇preg_replace和正则表达式。PHP的preg_replace正则表达式

所以我从字符串唯一需要的是以下03B 之前卸下的每一件事情/和斜线(/)和后/和点(。)

$string = 'rmbefore/03b.rmafter' 

提前感谢!

+0

你的意思是说,你想'/'之间的串'.'? – codaddict 2011-03-04 10:22:19

+0

见[正则表达式的设计工具(http://stackoverflow.com/questions/89718/is-there-anything-like-regexbuddy-in-the-open-source-world)和[regular-expressions.info](HTTP ://regular-expressions.info/)来学习语法 – mario 2011-03-04 10:23:48

回答

4

您可以使用反向引用中的preg_replace做到这一点:

preg_replace('#.*/([^\.]+)\..*#', '$1', $input); 

此搜索任何东西直到一个斜杠,然后尽可能多的下面的字符串不是一个点,把它放在组1中(这就是围绕它的'()'),接着是一个点和其他东西,并用组1的内容替换它(whic h是括号内的表达式,在你的例子中应该是“03b”)。这是一个关于正则表达式的好网站:http://www.regular-expressions.info/php.html

希望这会有所帮助。

0
$string = preg_replace('~^.*/(.*?)\..*$~',"$1",$string); 
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 
+0

你忘了给你的正则表达式添加分隔符。 – codaddict 2011-03-04 10:26:47

+0

谢谢,我不知道php正则表达式的语法。为什么当它已经在字符串中时需要分隔符?我的意思是,我理解把它放在分隔符(Perl)之间,把它放在一个字符串(Python)中,但为什么呢? – markijbema 2011-03-04 10:28:50

2

你不需要对这种情况下的正则表达式,这将是超必杀。您可以使用substrstrpos函数中的内部版本。

$from = strpos($string, '/') + 1; 
$to = strpos($string, '.'); 

echo substr($string, $from, $to - $from); 

// echos 03b 

Ofcause您可以在一个行做到这一点,以上只是为了清楚起见

echo substr($string, strpos($string, '/') + 1, strpos($string, '.') - strpos($string, '/') - 1);