[英]RegEx for #/Text pattern using MySql
我在MySQL中使用了Regex來在MySql記錄中找到各種字符串模式(例如Init Cap,All Caps)。 我試圖找到一個更復雜的模式,其中也包括可選的字符串。 我知道,如果我只是搜索所有可能的模式,它就會起作用,但嘗試查看RegEx是否比這更強大,並且將至少幫助我減少需要搜索的模式數量。 本質上,該模式是數字字后綴。
1)模式的開頭始終是#,但不得為1-5位數。 我希望不必先搜索[0-9],然后再搜索[0-9] [0-9]等。換句話說,可以用某種方式搜索1到9999(不帶前導零)的任何數字字符串
2)在前導數字和后綴之間最多可以包含三個單詞。 同樣,我希望不必使用1,2和3個單詞的模式匹配。 顯然,如果我必須對每個數字版本執行此操作,那么我已經有4 * 3個模式可以搜索,這似乎效率很低
3)有一個可選的修飾詞,可以在中間詞之后或在后綴之后。 如上所述,我更希望這樣表示,從本質上講,我可以簡單地制作一個包含以下邏輯的正則表達式:
[最多4位數字] [從修飾詞已知列表中選擇的修飾符] [一到三個未知單詞] [從已知后綴詞列表中的后綴] [從修飾詞已知列表中的可選修飾符]
RegEx能否部分完成這項任務,如果可以的話,在此方面提供的任何幫助將不勝感激。
由於MySQL使用Henry Spencer的Regex實現 ,因此可能無法使用\\s
, \\w
...之類的常用速記,而是可以使用類似於posix的字符類( MySQL regex手冊 )。
所需模式 :
[最多4位數字] [從修飾詞已知列表中選擇的修飾符] [一到三個未知單詞] [從已知后綴詞列表中的后綴] [從修飾詞已知列表中的可選修飾符]
我不清楚的是:什么詞? 除字母字符外,還可以包括哪些字符? 將[[:alpha:]]
視為單詞字符還是[[:alnum:]]
? 也可以為某些字符擴展posix類,這些字符應該是單詞字符,例如[[:alpha:]\\'-]
。
同樣,對於不同的排序utf8_bin
例如utf8_general_ci
和utf8_bin
,事情也會變得不同。例如:
SELECT 'A' REGEXP '[az]'
=> 1
SELECT BINARY 'A' REGEXP '[az]'
=> 0
圖案
假設[[:alpha:]]
為單詞字符 , [[:space:]]
為分隔符/邊界:
[1-9][0-9]{0,3}
...最多應匹配4位數字:1至9999 ([[:space:]](mod1a|mod1b|mod1c))?
...可選的修飾詞... * ([[:space:]][[:alpha:]]+){1,3}
...一到三個未知詞 ([[:space:]](sfxa|sfxb|sfxc))
...已知列表中的后綴... ([[:space:]](mod2a|mod2b|mod2c))?
...可選的修飾詞* )
之后的問號使帶括號的組成為可選的。 里面有另一個帶括號的組,帶有不同的單詞。 有關更多詳細信息,請參見SO Regex常見問題解答 。
MySQL正則表達式中也有字邊界(零寬度): [[:<:]]word[[:>:]]
::: [[:<:]]word[[:>:]]
將所有內容放在一起並放在^
start和$
end錨之間,該模式可能類似於:
SELECT '9999 mod1a aa ab ac sfxa mod2a'
REGEXP '^[1-9][0-9]{0,3}([[:space:]](mod1a|mod1b|mod1c))?([[:space:]][[:alpha:]]+){1,3}([[:space:]](sfxa|sfxb|sfxc))([[:space:]](mod2a|mod2b|mod2c))?$'
根據您的需求進行測試和修改。 希望這對您有所幫助,祝您滿意!
這樣的事情可能會讓您入門:
[1-9]\d{0,4}\s+ # 1-9 (no leading 0), followed by up to 4 more digits and whitespace
(\w+\s+)? # Optional modifier (replace \w+ with modifiers) followed by whitespace
(\w+\s+){1,3} # 1-3 occurrences unknown words (you may want to elaborate on \w+) followed by whitespace
\w+ # Required suffix (replace \w+ with suffixes)
(\s+\w+)? # Optional modifier (replace \w+ with modifiers) preceeded by whitespace
請參閱此完整示例,以了解如何實現修飾符/后綴的列表。 在此示例中,我們的修飾語為['optional', 'etc']
,我們的后綴為['suffix', 'end']
。
如果您需要更多指導,請在評論中告訴我,這應該會帶您正確的方向。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.