1

我有这个部分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 个字符。

抱歉英语不好。谢谢!

4

2 回答 2

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'

演示

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

于 2013-08-30T05:50:20.430 回答
0

你试过逃避/吗?代替

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

尝试

$first = 'aaa\/';
$after = '\/';
于 2013-08-30T05:50:04.793 回答