我遗憾的是不那么熟悉正则表达式 - 所以有人可以帮我这个吗? 我有这个字符串:
$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的中心部分......
有人可以帮我这个吗?
答案 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个或多个字符}和[
)和]
匹配文字]
。该值位于]
内。