Re: [問題] boost regex 顯示問題
看板RegExp (正規表示式 Regular Expression)作者godspeedlee (我是好人,也是個壞人)時間14年前 (2011/06/05 14:52)推噓0(0推 0噓 0→)留言0則, 0人參與討論串2/2 (看更多)
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
RegExp 近期熱門文章
PTT數位生活區 即時熱門文章