我有 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个字符。
抱歉英语不好。谢谢!
答案 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'
问题是由/
是正则表达式中的分隔符引起的。您也可以通过使用不同的分隔符(例如~
)来解决此问题,但是,只要您的字符串包含~
或任何其他具有特殊字符的字符,您就会遇到同样的问题意思是.
或?
。通过使用preg_quote,您将不会再次遇到此问题。
答案 1 :(得分:0)
您是否尝试过转发/
?
而不是
$first = 'aaa/';
$after = '/';
尝试
$first = 'aaa\/';
$after = '\/';