在PHP中,我有这样的字符串:
$string = "This is a 123 test (your) string (for example 1234) to test.";
从那个字符串中,我想用数字来获取()中的单词。我尝试过使用爆炸,但由于我在括号中有两个单词/一组字符串,我最终得到(你的)而不是(例如1234)。我也像这样使用substr:
substr($string, -20)
这大部分时间都有效,但问题是,有些情况下字符串较短,因此最终会得到不需要的字符串。我也试过使用正则表达式,我设置了这样的东西:
/[^for]/
但这也不起作用。我想要获得的字符串始终以"开头#"但长度各不相同。我如何操纵php,以便我只能获得以括号开头的括号内的字符串?
答案 0 :(得分:3)
在这种情况下,我可能会使用preg_match()。
preg_match("#\((for.*?)\)#",$string,$matches);
找到的任何匹配项都会存储在$ matches中。
答案 1 :(得分:2)
使用以下正则表达式:
(\(for.*?\))
它将捕获如下的模式:
(for)
(foremost)
(for example)
(for 1)
(for: 1000)
示例PHP代码:
$pattern = '/(\(for.*?\))/';
$result = preg_match_all(
$pattern,
" text (for example 1000) words (for: 20) other words",
$matches
);
if ( $result > 0 ) {
print_r( $matches );
}
高于print_r( $matches )
结果:
Array
(
[0] => Array
(
[0] => (for example 1000)
[1] => (for: 20)
)
[1] => Array
(
[0] => (for example 1000)
[1] => (for: 20)
)
)
答案 2 :(得分:1)
将preg_match用于正则表达式
$matches = array();
$pattern = '/^for/i';
preg_match($pattern,$string,$matches);
pirnt_r($matches);
如果提供了matches
,则会填充搜索结果。 $matches[0]
将包含与完整模式匹配的文本,$matches[1]
将具有与第一个捕获的带括号的子模式匹配的文本,依此类推。
答案 3 :(得分:0)
$matches = array();
preg_match("/(\(for[\w\d\s]+\))/i",$string,$matches);
var_dump($matches);