繼短檔案上regexp_matches:
回傳通過將 POSIX 正則運算式與字串匹配而產生的所有捕獲的子字串。
示例:regexp_matches('foobarbequebaz', '(bar)(beque)') 回傳 {bar,beque}
考慮到這一點,我希望結果regexp_matches('barbarbar', '(bar)')是{bar,bar,bar}
但是,只能{bar}回傳。
這是預期的行為嗎?我錯過了什么嗎?
注意:呼叫regexp_matches('barbarbar', '(bar)', 'g')確實回傳所有 3bar秒,但以表格形式:
| regexp_matches 文本[] |
|---|
| {酒吧} |
| {酒吧} |
| {酒吧} |
uj5u.com熱心網友回復:
此行為在9.7.3中有更詳細的描述。POSIX 正則運算式:
regexp_matches 函式回傳一組捕獲的子字串的文本陣列,這些子字串是通過將 POSIX 正則運算式模式與字串匹配而產生的。它具有與 regexp_match 相同的語法。如果沒有匹配,則此函式不回傳任何行,如果有匹配且未給出 g 標志,則回傳一行,如果有 N 匹配且給出 g 標志,則回傳 N 行。每個回傳的行是一個文本陣列,包含整個匹配的子字串或匹配模式的括號子運算式的子字串,正如上面針對 regexp_match 所述。regexp_matches 接受表 9.24 中顯示的所有標志,加上命令它回傳所有匹配項的 g 標志,而不僅僅是第一個。
uj5u.com熱心網友回復:
這是預期的行為。該函式回傳 a set of text[],這意味著多個匹配項出現在多行中。為什么是這樣組織的?目標是使從單個匹配中找到多個令牌成為可能。在這種情況下,它們以陣列的形式呈現。該檔案提供了一個有說服力的例子:
SELECT regexp_matches('foobarbequebazilbarfbonk', '(b[^b] )(b[^b] )', 'g');
regexp_matches
----------------
{bar,beque}
{bazil,barf}
(2 rows)
查詢回傳兩個匹配項,每個匹配項包含兩個找到的標記。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/352986.html
標籤:PostgreSQL
