簡體   English   中英

使用MySql的Reg /用於#/文本模式

[英]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_ciutf8_bin ,事情也會變得不同。例如:

SELECT 'A' REGEXP '[az]' => 1

SELECT BINARY 'A' REGEXP '[az]' => 0


圖案

假設[[:alpha:]]單詞字符[[:space:]]為分隔符/邊界:

  • 1.) [1-9][0-9]{0,3} ...最多應匹配4位數字:1至9999
  • 2.) ([[:space:]](mod1a|mod1b|mod1c))? ...可選的修飾詞... *
  • 3.) ([[:space:]][[:alpha:]]+){1,3} ...一到三個未知詞
  • 4.) ([[:space:]](sfxa|sfxb|sfxc)) ...已知列表中的后綴...
  • 5.) ([[: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.

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