PHP获取preg匹配的字符串

时间:2017-03-22 07:59:04

标签: php regex

我遗憾的是不那么熟悉正则表达式 - 所以有人可以帮我这个吗? 我有这个字符串:

$theString = 'MYSTRING-[DDAADD]-IS_SO_BEAUTYFULL'

我想要的只是提取2个方括号之间的内容,在这个例子中我应该得到DDAADD'。

  

目标是爆炸我的字符串,我得到3个字符串:

$first = 'MYSTRING-';
$second = 'DDAADD';
$third = '-IS_SO_BEAUTYFULL';

我如何联系到它?

我尝试使用preg_match,但我无法让它工作:

preg_match('/[^a-zA-Z0-9\[\]]+/', $string, $matches);

我也试试这个:

preg_match_all('/[A-Z\[\]]+/', $string, $matches);

然后我得到了我的三个字符串,但没有' - ' ..

我尝试使用preg_split,但我没有正确达到目标:

preg_split("/\[([^\]]+)\]/", $myString);

然后我只得到了我的2个字符串,但没有DDAADD的中心部分......

有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:2)

使用preg_split[][]+正则表达式匹配一个或多个[]符号:

$s = "MYSTRING-[DDAADD]-IS_SO_BEAUTYFULL";
$arr = preg_split('~[][]+~', $s);
print_r($arr);

sample demo的输出:

Array
(
    [0] => MYSTRING-
    [1] => DDAADD
    [2] => -IS_SO_BEAUTYFULL
)

另一种方法是使用preg_match \[([^][]+)]正则表达式(或\[([A-Z]+)]):

$s = "MYSTRING-[DDAADD]-IS_SO_BEAUTYFULL";
if (preg_match('~\[([A-Z]+)]~', $s, $res)) {
    echo($res[1] . "\n");
} // => DDAADD
if (preg_match('~\[([^][]+)]~', $s, $res)) {
    print_r($res[1]);
} // => DDAADD

请参阅another demo

在此处,\[[([A-Z]+)匹配到第1组中的一个或多个大写字母(或[^][]+匹配除{{1}以外的1个或多个字符}和[)和]匹配文字]。该值位于]内。