作者godspeedlee (我是好人,也是个坏人)
看板RegExp
标题Re: [问题] boost regex 显示问题
时间Sun Jun 5 14:52:11 2011
※ 引述《hhg4092 ()》之铭言:
: 请问我想抓每一个[]里的字元
: [a][b][c]..[n]
: 但又是不定个数,有时一个都没有
: 我目前的写法
: re = (\[(\w+)\])*
: 一个[str]的时候,是抓的到字串"str"
: 但二个元素的时候[str][str1]
: 都会抓成後面str1
: 请问re要怎麽改才是我想要的呢?
: -------------------------------
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 123.240.226.69
: ※ 编辑: hhg4092 来自: 123.240.226.69 (05/31 14:22)
: → blackkaku:\[(.+?)\] 05/31 19:06
: → hhg4092:好像不行欧,[aaa][bbb][ccc]会拆成aaa][bbb][ccc 06/01 09:46
: → hhg4092:我己经用别的方法取到我要的值了,感谢~ 06/01 09:47
这是一定的,因为你加上了 * 在 regex engine 的眼里
就会变成是在比对 [\w+] 的连续字串,用个简单的例子说明:
这大家都看得懂,连续 n 个 a:
/a*/
把 a 替换成 (\[(\w+)\]) 就变成连续 n 个 [\w+]
所以最里面的括号当然抓到的也是最後一个,要怎麽解决
其实很简单,连 * 都不需要,下面是 php 范例:
<?php
preg_match_all('/\[(\w+)\]/' , "[aa][bb][cc][dd]", $result, PREG_PATTERN_ORDER);
if(count($result) > 0)
{
echo $result[1][0];
for($j = 1; $j < count($result[0]); ++$j)
{
echo ', ' . $result[1][$j];
}
}
?>
--
http://godspeedlee.myweb.hinet.net/
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.124.101.219