PHP正则表达式 - 获取^之间的值

时间:2014-04-05 08:37:36

标签: php arrays regex function

无法理解这一点。

我有字符串

^c1_e^,^d_e^,^c^

获取^^之间的值的正则表达式是什么?

我试过

preg_match("/(?<=^).*?(?=^)/", $string, $match);

哪个不起作用

3 个答案:

答案 0 :(得分:4)

你需要逃脱插入符号。这些默认意味着&#39;行的开头&#39;在正则表达式:

preg_match('/(?<=\^).*?(?=\^)/', $string, $match);

以上内容也会获得,,但也只会获得第一场比赛。如果您想避开逗号并获取所有匹配项,则需要匹配^并使用捕获组:

preg_match_all('/\^([^^]+)\^/', $string, $match);

包含^之间部分的数组将位于数组$match[1]中。

一个非正则表达式解决方案(虽然它不太健壮,因为它无法使用^abc,def^, ^abc^格式的字符串,它应该给出abc,defabc)首先拆分,然后删除^

$theString = '^c1_e^,^d_e^,^c^';
$elements = explode(',', $theString);
for ($i = 0; $i < sizeof($elements); $i++) {
    $elements[$i] = trim($elements[$i], "^");
}
print_r($elements);

答案 1 :(得分:3)

您也可以使用此~\^(.*?)\^~

<?php
$str="^c1_e^,^d_e^,^c^";
preg_match_all("~\^(.*?)\^~", $str,$match);
echo "<pre>";
print_r($match[1]);

<强> OUTPUT :

Array
(
    [0] => c1_e
    [1] => d_e
    [2] => c
)

enter image description here

答案 2 :(得分:3)

更简单的解决方案:

<?php
$string = '^c1_e^,^d_e^,^c^';
preg_match_all('/([^^,]+)/', $string, $matches);
$strings = $matches[1];
print_r($strings); //prints an array with the elements from $string
?>