假设我有一个字符串:
"there are some words, [other, could, be, here] then other words [and,more,here]."
或
"[one,two,three] something outside [than, more here, and more]."
我想要一个括号组的数组,如:
Array ( [0] => [other, could, be, here] [1] => [and,more,here] )
或以后我可以使用的任何东西,一个对象也应该没问题。 实际上我已经尝试了一些正则表达式,但没有运气,似乎我不能接受多个组,或者如果字符串以匹配开头则有问题。
已经用于此的正则表达式是:
'/(\[\S+)\s(\S+\])/i'
'/\[([^]]+)\]/i'
'/\[(.*?)\]/i'
我做错了什么?
答案 0 :(得分:1)
期待"不是什么"介于[]
preg_match_all( '#\[([^\]]+)\]#', $string, $matches_array );
print_r( $matches_array );
... OR
期待"某事或可能没有"在[]
之间
preg_match_all( '#\[([^\]]*?)\]#', $string, $matches_array );
同样......将你的反引用括号()
放在要捕获的位置周围(你真的想要捕获括号吗?)
答案 1 :(得分:1)
如果你必须使用正则表达式然后忽略这个答案,但这是另一种方式:
$str="there are some words, [other, could, be, here] then other words
[and,more,here].";
$found=array();
$foundcount=0;
for($i=0;$i<strlen($str);$i++){
if($str[$i]=='['){
$found[$foundcount]="";
for($j=$i;$j<strlen($str);$j++,$i++){
$found[$foundcount].=$str[$j];
if($str[$j]==']'){
$foundcount++;
break;
}
}
}
}
答案 2 :(得分:1)
如果你想保留方括号并且必须有一个子字符串,你可以这样做:
<强>解释强>
<Dependencies>
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.14316.0" MaxVersionTested="10.0.14316.0" />
</Dependencies>
PS C:\Users\XXXXX\> [System.Environment]::OSVersion.Version
Major Minor Build Revision
----- ----- ----- --------
10 0 10240 0
代替\[
来匹配空括号[]) {{ 1}} *
例如:
+
如果您想在方括号内匹配,可以使用
答案 3 :(得分:1)
尝试以下方法:
std::unordered_map
示例:
/\[[^\]]*\]/
输出:
$str = "there are some words, [other, could, be, here] then other words [and,more,here].";
preg_match_all('/\[[^\]]*\]/', $str, $matches);
$matches = $matches[0];
print_r($matches);
答案 4 :(得分:0)
试试这个正则表达式:
$str= "[one,two,three] something outside [than, more here, and more].";
preg_match_all("/\[[^\]]*\]/", $str, $matches);
var_dump($matches[0]);