執行以下操作:
select regexp_matches('X', '');
空字串的正則運算式是否定義了行為?如果是這樣,它通常如何作業?
換句話說,以下哪項是基礎生產(忽略一些高級構造,例如重復、分組等)?
regex
: atom
;
或者:
regex
: atom*
;
舉個例子:
regex101 顯示不匹配所有 7 種風格,但 Postgres回傳true
.select regexp_matches('X', '');
uj5u.com熱心網友回復:
根據定義,空正則運算式匹配空字串。在子字串匹配中(這是 PostgreSQLregex_match
執行的),匹配總是成功的,因為空字串是每個字串的子字串,包括它自己。所以這不是一個非常有用的查詢,但它應該適用于任何正則運算式實作。(它作為完整的字串匹配可能更有用,但字串相等也可以作業,而且開銷可能更少。)
空匹配在正則運算式實作之間確實有所不同的一個方面是它們如何與“全域”(重復應用程式)標志或等效項進行互動。大多數正則運算式引擎會在成功匹配零長度子字串后前進一個字符,但也有例外。作為一般規則,可為空的正則運算式(包括空的正則運算式)不應與重復的應用程式標志一起使用,除非結果由正則運算式庫明確記錄(而且,對于它的價值,我找不到 PostgreSQL 的此類檔案,但這并不意味著它在某處不存在)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/512192.html
標籤:正则表达式解析句法语法