[英]List of named captures / groups in boost regex
我想知道如何在boost中的正則表達式中獲取捕獲組的名稱。
例如,如果用戶輸入了一個預期是帶有命名捕獲組的有效正則表達式的字符串,那么如何迭代正則表達式中已定義組的列表並獲取這些組的名稱。 boost是否提供了這樣做的設施,或者我應該編寫自己的解析器來提取這些名稱?
例如,如果輸入字符串是:
(?<year>[0-9]{4}).*(?<month>[0-9]{2}).*(?<day>[0-9]{2})
我希望能夠從正則表達式中提取“年”,“月”和“日”。
您可以使用以下正則表達式:
"\?<([^<>]+)>"
我不認為正則表達式引擎在編譯正則表達式之前提供了這樣的能力來提供捕獲組的名稱,因為它需要在解析(和編譯)正則表達式之前遍歷輸入正則表達式,這不是最佳方法,除非它編譯正則表達式一次並完成所有工作。
因此,關於您的評論,如果您可能有一個未命名的組,您最好循環捕獲的組並查看它是否有名稱。
請注意,也許您可以使用正則表達式來解析具有未命名組的案例,但我認為這不是一般方法。
例如,您可以在括號內使用上述正則表達式來捕獲其中沒有其他捕獲組的所有組( [^()]*
將確保):
`\((\?<([^<>]+)>)[^()]*\)`
而對於另一種情況,你必須寫另一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.