我想找到匹配的任何内容
[^1] and [/^1]
例如,如果主题是这样的
sometext[^1]abcdef[/^1]somemoretext[^2]12345[/^2]
我想以abcdef和12345作为元素返回一个数组。
我看了this
我写了这段代码,我无法在[]
之间进行搜索<?php
$test = '[12345]';
getnumberfromstring($test);
function getnumberfromstring($text)
{
$pattern= '~(?<=\[)(.*?)(?=\])~';
$matches= array();
preg_match($pattern, $text, $matches);
var_dump($matches);
}
?>
答案 0 :(得分:1)
您的测试会检查字符串'[12345]'
,该字符串不适用于[^digit]
的“开放”和[\^digit]
的“结束”规则。此外,您应该在使用时使用preg_match
:preg_match_all
试试这个:
<?php
$test = 'sometext[^1]abcdef[/^1]somemoretext[^2]12345[/^2]';
getnumberfromstring($test);
function getnumberfromstring($text)
{
$pattern= '/(?<=\[\^\d\])(.*?)(?=\[\/\^\d\])/';
$matches= array();
preg_match_all($pattern, $text, $matches);
var_dump($matches);
}
?>
答案 1 :(得分:0)
我在php 5.4.5中测试了以下代码:
<?php
$foo = 'sometext[^1]abcdef[/^1]somemoretext[^2]12345[/^2]';
function getnumberfromstring($text)
{
$matches= array();
# match [^1]...[/^1], [^2]...[/^2]
preg_match_all('/\[\^(\d+)\]([^\[\]]+)\[\/\^\1\]/', $text, $matches, PREG_SET_ORDER);
for($i = 0; $i < count($matches); ++$i)
printf("%s\n", $matches[$i][2]);
}
getnumberfromstring($foo);
?>
输出:
abcdef
123456