當前位置:首頁 » 操作系統 » 資料庫的正則表達式

資料庫的正則表達式

發布時間: 2023-05-09 16:02:00

『壹』 資料庫的正則表達式(REGEXP )的問題

正則本身可能是沒有問題的。
如果你確認你的資料庫支持正則約束的話,那麼問題好像是出在語句宿主程序上。
我的意思是說,可能是你的phppython、asp等語言將你正則中的反斜杠在發送到資料庫之前給處理掉了,最終資料庫中接到的正則像極了如下的形態:
d{4}-d{8}
如果你希望送到資料庫中的正則是完整的,或者使用語言自帶的資料庫字串處理相關語句,或者將你的正則寫成如下:
\\d{4}-\\d{8}

『貳』 在ms sql中如何使用正則表達式,請給出簡單示例,注釋越詳細越好!感激不盡

MSSQL不支持正則表達式,可以用CLR實現。

1、新建一個MSSQL的資料庫項目,配置到你的資料庫中

2、在資料庫項目中新建一個函數庫,編寫如下代碼:

///<summary>

///驗證是否符合正則表達式

///</summary>

[SqlFunction]

(stringinput,stringregex)

{

returnnewSqlBoolean(Regex.IsMatch(input,regex,RegexOptions.IgnoreCase));

}

然後在資料庫項目上點擊「右鍵」,選擇「部署」

PS:此功能需要MSSQL2005或者以上版本支持

如果你使用的是.NET3.5版本的話,需要在資料庫伺服器上安裝.netframework3.5

目前SQLSERVERCLR不支持.NET4.0,所以如果你使用VS2010開發的話需要把項目版本修改成為.NET2.0/3.5

使用方法:

SELECT*FROM[table]WHEREdbo.RegexIsMatch([ID],'^d+$')=1

『叄』 sql正則表達式常用符號

SQL的查詢語句中,有時會需要引進正則表達式為其復雜搜索指定模式。下面給出一些Regexp在
MYSQL語句中應用(非全部):
1) ^
匹配字元串的開始部分。
mysql> SELECT 'fo\nfo' REGEXP '^fo$'; -> 0mysql> SELECT 'fofo' REGEXP '^fo'; -> 12) $
匹配字元串的結束部分。
mysql> SELECT 'fo\no' REGEXP '^fo\no$'; -> 1mysql> SELECT 'fo\no' REGEXP '^fo$'; -> 03) .
匹配任何字元(包括回車和新行)。
mysql> SELECT 'fofo' REGEXP '^f.*$'; -> 1mysql> SELECT 'fo\r\nfo' REGEXP '^f.*$'; -> 14)
[:character_class:]
在括弧表達式中(使用[和]),[:character_class:]表示與術語類的所有字元匹配的字元類。標準的類名稱是:
alnum
文字數字字元
alpha
文字字元
blank
空白字元
cntrl
控制字元
digit
數字字元
graph
圖形字元
lower
小寫文字字元
print
圖形或空格字元
punct
標點字元
space
空格、製表符、新行、和回車
upper
大寫文字字元
xdigit
十六進制數字字元
它們代表在ctype(3)手冊頁面中定義的字元類。特定地區可能會提供其他類名。字元類不得用作范圍的端點。
mysql> SELECT 'justalnums' REGEXP '[[:alnum:]]+'; -> 1
mysql> SELECT '!!' REGEXP '[[:alnum:]]+'; -> 0
5) [[:<:]], [[:>:]]
這些標記表示word邊界。它們分別與word的開始和結束匹配。word是一系列字字元,其前面和後面均沒有字
字元。字字元是alnum類中的字母數字字元或下劃線(_)。
mysql> SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]'; -> 1mysql> SELECT 'a xword a' REGEXP
'[[:<:]]word[[:>:]]'; -> 0要想在正則表達式中使用特殊字元的文字實例,應在其前面加上2個反斜杠「\」字元。
MySQL解析程序負責解釋其中一個,正則表達式庫負責解釋另一個。例如,要想與包含特殊字元「+」的字元
串「1+2」匹配,在下面的正則表達式中,只有最後一個是正確的:
mysql> SELECT '1+2' REGEXP '1+2'; -> 0mysql> SELECT '1+2' REGEXP '1\+2'; -> 0mysql> SELECT
'1+2' REGEXP '1\\+2'; -> 1 其他的有關Regexp的語法,可直接參考下表:字元 含意
\ 做為轉意,即通常在"\"後面的字元不按原來意義解釋,如/b/匹配字元"b",當b前面加了反斜桿後/\b/,轉意
為匹配一個單詞的邊界。
-或-
對正則表達式功能字元的還原,如"*"匹配它前面元字元0次或多次,/a*/將匹配a,aa,aaa,加了"\"後,/a\*/將
只匹配"a*"。
^ 匹配一個輸入或一行的開頭,/^a/匹配"an A",而不匹配"An a"
$ 匹配一個輸入或一行的結尾,/a$/匹配"An a",而不匹配"an A"
* 匹配前面元字元0次或多次,/ba*/將匹配b,ba,baa,baaa
+ 匹配前面元字元1次或多次,/ba*/將匹配ba,baa,baaa
? 匹配前面元字元0次或1次,/ba*/將匹配b,ba
(x) 匹配x保存x在名為$1...$9的變數中
x|y 匹配x或y
{n} 精確匹配n次
{n,} 匹配n次以上
{n,m} 匹配n-m次
[xyz] 字元集(character set),匹配這個集合中的任一一個字元(或元字元)
[^xyz] 不匹配這個集合中的任何一個字元
[\b] 匹配一個退格符
\b 匹配一個單詞的邊界
\B 匹配一個單詞的非邊界
\cX 這兒,X是一個控制符,/\cM/匹配Ctrl-M
\d 匹配一個字數字元,/\d/ = /[0-9]/
\D 匹配一個非字數字元,/\D/ = /[^0-9]/
\n 匹配一個換行符
\r 匹配一個回車符
\s 匹配一個空白字元,包括\n,\r,\f,\t,\v等
\S 匹配一個非空白字元,等於/[^\n\f\r\t\v]/
\t 匹配一個製表符
\v 匹配一個重直製表符
\w 匹配一個可以組成單詞的字元(alphanumeric,這是我的意譯,含數字),包括下劃線,如[\w]匹配
"$5.98"中的5,等於[a-zA-Z0-9]
\W 匹配一個不可以組成單詞的字元,如[\W]匹配"$5.98"中的$,等於[^a-zA-Z0-9]。

『肆』 資料庫的正則表達式(REGEXP )的問題

[[:<:]]
[[:>:]]
分別匹配一個單詞開頭和結尾的空的字元串,這個單詞開頭和結尾都不是包含在alnum中
的字元也不能是下劃線。(alnum表示英文字母和數字字元)
mysql> select 「a word a」 REGEXP 「[[:<:]]word[[:>:]]」; -> 1(表示匹配)
mysql> select 「a xword a」 REGEXP 「[[:<:]]word[[:>:]]」; -> 0(表示不匹配)
SELECT * FROM Procts WHERE account_id REGEXP '[[:<:]]12[[:>:]]';
表示account_id中匹配"111 12 897"這樣的account_id

『伍』 資料庫筆記-SQL過濾(LIKE&正則表達式)

查詢語句:

結果:

查詢語句:

結果:

查詢語句:

結果:

查詢語句:

正則表達式 [32]1,[32]定義一組字元,它的意思是匹配 3 或匹配 2,也就是「31」或者 「21」都算是匹配的。

結果:

查詢語句:

結果:

如果要匹配特殊字元的,需要加上前導「」,「-」表示查找「-」,「.」表示查找「.」
這種就是 「轉義(escaping)」 ,在正則表達式里,本身有意義的字元,比如「.」是匹配任意字元的意思。那如果要匹配它,需要轉義。
注意:在 MySQL 里,是比其他的正則表達式多一個「」的,就是「」。

趣味提問:

如何匹配「」?
答案:「\」

\([0-9] sticks?\) 匹配的是(NUM stick)或者(NUM sticks)。s後的 ? 使得s可選。

重復元字元

* 是 0 個或多個匹配
? 是 1 個或多個匹配
{n} 是指定n個匹配
{n,} 是 不少於 n 個匹配
{n,m} 是 指定匹配的范圍,m不超過 255

查詢語句:

^值的是字元串的開始,$是字元串的結尾。

這就是 REGEXP 與 LIKE 類似,但是它獨特的好處:可以通過「定位符」只匹配「子字元串」。

結果:

『陸』 oracel 資料庫查詢某一個表中是否有小寫字母的sql語句用正則表達式

oracel
資料庫查詢某一個表中是否有小寫字母的sql語句用正則表達式

regexp_like這個函數來解決,正則表達式為:[[:punct:]]+這個正則可以找出任何標點符號。
查詢value中包含任何標點符號的記錄如下:
select
*
from
xxx
where
regexp_like(value,'[[:punct:]]+');

『柒』 gp資料庫正則表達式

gp資料庫正則表達式
在gp資料庫中使用正則表達式時需要使用關鍵字「~」冊襲,以表示該關鍵字之前的內容需匹配之後州碰兄的正則表達式,若匹配規則不需要區分大小寫,可以使用組合吵鉛關鍵字「~*」;
相反,若gp資料庫正則表達式需要查詢不匹配這則表達式的記錄,只需在該關鍵字前加否定關鍵字「!」即可。若正則表達式包含轉義字元,則需在表達式前加關鍵字「E」。

『捌』 mysql資料庫中 正則表達式 「{n,m}」的用法

{n,m}
表示,前面的字元至少匹配n次,最多匹配m次
用php preg_match()函數舉例

<?php
$str = 'goooogle';
if(preg_match("/go{1,3}gle/",$str)) echo '匹配';
else echo '不匹配';
//g*gle 其中的*號只能在1-3個o時能匹配
?>

『玖』 SQL的正則表達式

注意:正則表達式後面需用''括起來,因為正則表達式是針對「文本」的匹配。

正則表達式REGEXP可以理解為可支持更多規則/通配符的LIKE,可以對檢索內容進行更強的控制。LIKE本身只能和%及_這兩種通配符連接進行粗略的搜索,而REGEXP可以支持更多規則,比如.是和%一樣的可匹配任意一個字元的正則模式,[]可匹配一個范圍,如REGEXP '[1-5] ton'可以搜索出來1 ton、2 ton、3 ton、4 ton、5 ton。

一些正則模式:

.  :匹配任意一個字元,類似於%

| :類似於OR

[] :字元集合,可用|隔開表or選項,也可用-定義范圍

[^] :類似於NOT,匹配非[]框內的

定位元字元 :

^ :匹配輸入字元串的開始位置【^有兩種用法,一種是開始位置,一種和[]連在一起表示NOT】

$ :匹配輸入字元串的結束位置

[[:<:]] :詞的開始

[[:<:]] :詞的結尾

字元類 (預定義的字元集,類似「快捷鍵」):

重復元字元 :

* :0次或多次匹配

+ :1次或多次匹配(等於{1,})

? :匹配它前面的任何字元0次或1次(等於{0,1})

{n} :指定數目的匹配

{n,} :不少於指定數目的匹配

{n,m} :匹配數目的范圍(m不超過255)

正則表達式略復雜,但用好了會非常方便,所以務必把各種正則模式記熟。

關於特殊字元所在位置會造成不同影響,有個小例子:

^[0-9\\.]表示查找以0-9里任意一個數字和「.」開頭的字元串

[^0-9\\.]表示除了「0-9.」這個單詞外的任意字元串

轉義

如果想搜出代表正則模式字元本身,比如想查找「.」,如果直接輸REGEXP '.',那麼查找出來的將是全部行,因為「.」表示任意字元;又比如想查找「|」,直接輸REGEXP '|',那麼查找不出結果,因為正則表達式認為這是or的含義,此時需要用到「轉義」的功能,即在想查找的特殊字元前輸入兩條斜杠——「//」,告訴正則表達式現在要查找的是特殊字元本身,而不是它所代表的含義。

另外還有一些在SQL練習中碰到的其他注意事項:

NOT只對單個欄位有效,如果想多重否定,需要在每個欄位前都加上NOT,比如 WHERE vend_id NOT IN(1002,1003)  AND prod_price NOT IN (5.99);

通配符%可以任意長度的字元,包括0字元,但不能匹配出NULL;_只能匹配單個字元。注意盡量少使用通配符,並且盡量不要在開頭使用,避免搜索時間過長。

『拾』 資料庫替換的正則表達式如何寫

s/[\<\xA3\xBC]\s*[p\xA3\xD0].+?[\/\辯凳xA3\xAF][p\攜鋒旅xA3\xD0]\s*[>\xA3\xBE]/基陪''/i

熱點內容
python中ord函數 發布:2025-05-16 10:14:25 瀏覽:339
電腦啟動後無法連接伺服器 發布:2025-05-16 10:06:39 瀏覽:983
jar包編譯過程 發布:2025-05-16 10:03:37 瀏覽:678
選舉源碼 發布:2025-05-16 09:58:59 瀏覽:748
超級訪問陳小春應采兒 發布:2025-05-16 09:43:29 瀏覽:478
緩存視頻合並工具最新版 發布:2025-05-16 09:35:03 瀏覽:194
花雨庭伺服器ip地址和埠 發布:2025-05-16 09:34:58 瀏覽:239
同時修改多台伺服器管理地址工具 發布:2025-05-16 09:20:36 瀏覽:421
什麼配置就能玩地平線 發布:2025-05-16 09:13:46 瀏覽:82
python旋轉圖片 發布:2025-05-16 09:13:40 瀏覽:638