簡體   English   中英

REGEX查找MySQL中包含打開和關閉括號的行

[英]REGEX to Find Rows Containing Opening and Closing Parentheses in MySQL

我努力了:

....WHERE fieldname REGEXP '.*\(.*\).*';

但這將返回表中的每個記錄。

以REGEXP模式轉義正則表達式特殊元字符時,應使用雙反斜杠。 另外,由於REGEXP也可以找到部分匹配項,因此您不需要在開始/結尾使用.*

因此,您可以將表達式固定為

WHERE fieldname REGEXP '\\(.*\\)';

或者只使用LIKE ,其中%匹配任意數量的任意字符(但必須匹配整個條目,與REGEXP不同):

WHERE fieldname LIKE '%(%)%';

MySQL小提琴

DROP TABLE IF EXISTS t;
CREATE TABLE t (word varchar(255));
INSERT INTO t (word)
VALUES
    ('test (here)'),
    ('test (here) test'),
    ('(here) test'),
    ('test no'),
    ('no test');

SELECT * FROM t WHERE word REGEXP '\\(.*\\)';

SELECT * FROM t WHERE word LIKE '%(%)%';

在此處輸入圖片說明

要獲取類似text ) and ( here條目text ) and ( here ,您可以使用

SELECT * FROM t WHERE word REGEXP '\\(.*\\)|\\).*\\(';

SELECT * FROM t WHERE word LIKE '%(%)%' OR word LIKE '%)%(%';

看到另一個小提琴

LIKE會比REGEXP更有效率,但以REGEXP的術語來回答...

我懷疑OP希望括號位於行文本的中間。

提供的REGEXP的問題在於表達式是貪婪的。

。*完成匹配后,它已經吸收了整個記錄。

嘗試將前兩個。*表達式設為[^(] (和[^)] ),並刪除最后一個。*,因為它是多余的。

'[^\\(]*\\([^\\)]*\\)' 

基本上,這個表達式說

  • 尋找零個或多個非(字元
    • 然后尋找一個(
    • 然后尋找零個或多個非)字符
    • 然后尋找一個)字符

()可以在記錄中的任何位置,並且()內可以包含零個或多個字符。

可能我建議在https://regex101.com/擺弄

希望這可以幫助。

暫無
暫無

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

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