/(斜杠)在preg_match中

时间:2013-08-30 05:46:51

标签: php preg-match

我有 some / aaa / 9321 / something 这一部分,我只想从中提取 9321 。 “某事”总是不同,“aaa”是静态的。所以,我用过:

$text = "something/aaa/9321/something";
$first = 'aaa/';
$after = '/';
preg_match("/$first(.*)$after/s",$text,$result);
echo $result;

但是没有用。有人可以告诉我我需要用什么吗? 我也试过这个:

$text = "something/aaa/9321/something";
$first = 'aaa';
preg_match("|$first(.*)|",$text,$result);
echo substr($result['1'], 1, 4);

aaa 之间并不总是4个字符。

抱歉英语不好。谢谢!

2 个答案:

答案 0 :(得分:3)

当你希望它们以正则表达式字面意思理解时,你应该总是preg_quote字符串:

$text = 'something/aaa/9321/something';
$first = preg_quote('aaa/', '/');
$after = preg_quote('/', '/');
preg_match("/$first(.*)$after/s",$text,$result);
echo $result[1]; // '9321'

Demo

问题是由/是正则表达式中的分隔符引起的。您也可以通过使用不同的分隔符(例如~)来解决此问题,但是,只要您的字符串包含~或任何其他具有特殊字符的字符,您就会遇到同样的问题意思是.?。通过使用preg_quote,您将不会再次遇到此问题。

答案 1 :(得分:0)

您是否尝试过转发/? 而不是

$first = 'aaa/';
$after = '/';

尝试

$first = 'aaa\/';
$after = '\/';