无法理解这一点。
我有字符串
^c1_e^,^d_e^,^c^
获取^
和^
之间的值的正则表达式是什么?
我试过
preg_match("/(?<=^).*?(?=^)/", $string, $match);
哪个不起作用
答案 0 :(得分:4)
你需要逃脱插入符号。这些默认意味着&#39;行的开头&#39;在正则表达式:
preg_match('/(?<=\^).*?(?=\^)/', $string, $match);
以上内容也会获得,
,但也只会获得第一场比赛。如果您想避开逗号并获取所有匹配项,则需要匹配^
并使用捕获组:
preg_match_all('/\^([^^]+)\^/', $string, $match);
包含^
之间部分的数组将位于数组$match[1]
中。
一个非正则表达式解决方案(虽然它不太健壮,因为它无法使用^abc,def^, ^abc^
格式的字符串,它应该给出abc,def
和abc
)首先拆分,然后删除^
:
$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
)
答案 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
?>