2013-10-31 35 views
3

嘿,我想在MySQL中使用正则表达式来匹配行。 它需要匹配模式结束的行与任何不是数字或行尾的行。匹配可选行尾

此模式在Ruby中工作/download:223(?:[\D]|$)/ 在MySQL中它不匹配。我猜测它不允许可选的eol匹配。

SELECT id FROM stories WHERE body REGEXP 'download:223(?:[\D]|$)' 

我需要符合以下条件(行情只是为了清楚起见):

"download:223" 
"download:223*" 
"download:223 something" 
"download:223 more text" 

而不是下面的(再次只是为了清楚起见引号):

"download:2234" 
"download:2234 more text" 
"download:2234*" 
"download:2234* even more" 

谢谢!

+0

随着岁末的-line,你可能意思是结尾(''')? – Teejay

+0

yeh $(行尾)作为\ z(字符串结尾) – Rob

+0

仅当启用多行时 – Teejay

回答

1

此正则表达式应该为你工作:

"download:223([^0-9]|$)" 

MySQL的正则表达式引擎不支持\ d \ d等

+0

在我的无知中,我认为他们得到了支持,谢谢!排序 – Rob

+0

不客气,很高兴它为你解决。 – anubhava

1

MySQL正则表达式不支持非捕获组。其余的应该没问题。它绝对支持$匹配字符串的结尾。此外,\ d是不支持,但你可以使用[^ 0-9]

试试这个:

SELECT id FROM stories WHERE body REGEXP 'download:223([^0-9]|$)' 

MySQL的组不捕捉,所以支持非捕获组是不必要的。

参考来源: Using Non-Capturing Groups in MySQL REGEXP

+1

感谢您的信息,这与任何内容不匹配 – Rob

+0

啊我看你已经改变了关于\ D的答案。非常感谢您的帮助。 – Rob

+0

如果[^ [:digit:]]也起作用,那就好奇了。 – sdanzig