Re: [問題] 反向表列的正規式?

看板RegExp作者 (我是好人,也是個壞人)時間13年前 (2011/07/17 04:37), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
※ 引述《Uruzu (...)》之銘言: : 前言: : 因為ctags沒有支援我正在用的程式語言(systemverilog) : 於是上google尋找解法,在當中找到了一個範例,可以讓ctags支援SV : 但是那個例子不夠周全,只好自己動動手,加入適當的Regex, : 好讓它看起來更完整一點 : 問題一: : typedef class Myclass; : typedef enum { .... } enum_type; : 上面兩行是程式碼中經常出現的code : 我想單純的用兩個Regex把這兩種分開來 : ^[ \t]*typedef[ \t]+.*[ \t]+([a-zA-Z_0-9]+)[ \t]*; : 這會符合第一、二行code : ^[ \t]*typedef[ \t]+enum[ \t]+.*[ \t]+([a-zA-Z_0-9]+)[ \t]*; : 這會符合第二行code : 要如何反向表列,才能使第一個Regex只會符合第一行而不包含第二行? 用 Negative Lookahead 試試看 第一個改成: ^[ \t]*typedef[ \t]+(?:(?!enum\b).*)[ \t]+([a-zA-Z_0-9]+)[ \t]*; : 問題二: : 有時候 code 會寫成這樣: : typedef enum { AAA, : BBB, : ... } enum_type; : ^[ \t]*typedef[ \t]+enum[ \t]+.*[ \t]+([a-zA-Z_0-9]+)[ \t]*; : 紅色的部份該如何處理分行的部份比較好? 就我知道的回答你一下,ctags 提供的 regex 從 http://ctags.sourceforge.net/EXTENDING.html 的解釋來看是 line-oriented,所以 .* 無法跨行 (無法打開 dot match new line 的功能?) 但是上述的連結有提到可以用 callback 的方式解決, 這可能要請你多花點功夫了 剩下的就留給其他人補充吧 :) -- http://godspeedlee.myweb.hinet.net/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.124.97.109
文章代碼(AID): #1E8VQblO (RegExp)
文章代碼(AID): #1E8VQblO (RegExp)