簡體   English   中英

MYSQL 中的正則表達式錯誤

[英]Regex Error in MYSQL

我想在 MySQL 中選擇以 a,e, i,o,u 開頭並以 a,e, i,o,u 結尾的城市。(大小寫無關緊要)

查詢1

SELECT CITY FROM STATION WHERE CITY REGEXP '^[AEIOU]' and CITY REGEXP '[AEIOU]$';

查詢2

SELECT CITY FROM STATION WHERE CITY REGEXP '^[AEIOU]*[AEIOU]$';

為什么 Query2 給我一個錯誤,盡管 Query1 是正確的。

在您的第一個查詢中,您只能獲取以元音開頭或結尾的條目。 第二個僅匹配以 0 個或多個元音開頭並以元音結尾的條目(因此,您只會得到類似aAou結果)。

您可以嘗試使用

SELECT CITY FROM STATION WHERE CITY REGEXP '^[AEIOU].*[AEIOU]$'
                                                    ^^

.*模式盡可能多地匹配任何 0+ 個字符,因此它將匹配任何以元音開頭和結尾的字符串。

但是, WHERE CITY REGEXP '^[AEIOU]' and CITY REGEXP '[AEIOU]$'獲取僅包含 1 個元音的條目,並且上述不會匹配像A (單元音字符串)這樣的記錄。 要匹配那些使用可選組:

SELECT CITY FROM STATION WHERE CITY REGEXP '^[AEIOU](.*[AEIOU])?$'
                                                    ^         ^^

在這里, (...)? 是匹配模式序列1 次或 0 次(由於?量詞)的捕獲組(MySQL 正則表達式不支持非捕獲組)。

關於正則表達式的一些說明:

  • ^[AEIOU].*[AEIOU]$ - 以不區分大小寫的方式匹配以元音開頭和結尾的整個字符串( REGEXP不區分大小寫,除非與二進制字符串一起使用
    • ^ - 匹配輸入的開始
    • [AEIOU] - 集合中的一個元音
    • .* - 盡可能多的任何 0+ 個字符(MySQL 中使用的 POSIX 正則表達式不支持惰性量詞,並且.匹配任何字符,甚至是換行符)
    • [AEIOU] - 元音
    • $ - 輸入結束。

^ : 匹配字符串的開頭。 $ : 匹配字符串的結尾。 所以你可以嘗試使用上面的正則表達式並使用 % ,可能會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM