2013-07-25 2 views
1

Я пытаюсь выбрать все строки в таблице из базы данных, которая имеет следующую структуру:MySQL REGEXP запрос

<tr> 
<td> 
<p><strong>Completion Date:</strong></p> 
</td> 
<td> 
<p>April, 2012</p> 
</td> 
</tr> 

Но месяц и год могут быть разными.

Вот мой текущий оператор запроса:

SELECT * FROM `posts` WHERE `content` REGEXP "<tr>\r\n<td>\r\n<p><strong>Completion Date:</strong></p>\r\n</td>\r\n<td>\r\n<p>April, 2012</p>\r\n</td>\r\n</tr>" 

В настоящее время это будет только тянуть строки, которые имеют апреля 2012, которая является то, что я ожидаю, что это потянет. Я попытался заменить месяц на:^[A-Za-z] $, но это не сработало, ни какая-либо другая комбинация, которую я устал.

Может ли кто-нибудь помочь с правильным регулярным выражением?

Спасибо,

+0

Используйте [A-Za-z] * без знака carret и доллара, чтобы соответствовать ему. – beiller

+2

Я знаю, что это не ответ, но _ewww! _ Это способ для хранения данных в базе данных. –

ответ

1

Это должно дать результаты, которые вы ищете. Обратите внимание, как вам нужна звезда, что означает 0 или более [a-zA-Z], и ноль или более [0-9] символов.

SELECT * FROM `posts` WHERE `content` REGEXP "<tr>\r\n<td>\r\n<p><strong>Completion Date:</strong></p>\r\n</td>\r\n<td>\r\n<p>[a-zA-Z]*, [0-9]*</p>\r\n</td>\r\n</tr>" 

Каретка ^ и знак доллара $ матч начало и конец строки. Поскольку дата не в начале, они не будут соответствовать вам.

Удачи.

+0

Это сработало минус? на концах. – m1a2x3x7

+0

О, я вижу интересное! Благодаря! – beiller

+0

Да, вопросительные знаки там не принадлежат; Я отредактировал ответ, чтобы удалить их. (В регулярных выражениях типа PCRE '*?' Означает то же, что и '*', за исключением того, что он пытается сопоставить как можно меньше символов, но, насколько я могу судить, [regexp engine MySQL] (http: // dev .mysql.com/doc/refman/5.7/en/regexp.html) не поддерживает такое соответствие неграмотности. В любом случае, даже если бы это сработало, здесь не имело бы значения.) –

0

^[A-Za-z]$ будет соответствовать одному символу на линии (^ для начала строки, $ для конца строки).

Возможно, вам повезло с чем-то вроде: [A-Z][a-z]*,\s*[0-9]{4}. Для того, чтобы объяснить:

  • [A-Z] - 1 заглавная буква
  • [a-z]* - любое количество строчных букв (включая 0 из них)
  • , - запятой
  • \s* - любое количество пробелов (в том числе 0 из их)
  • [0-9]{4} - ровно 4 цифры
0

I е это только месяц и год вы можете сделать:

[a-zA-Z]+, \d{4}

Конечно, это будет иметь любое слово и ЛЮБУЮ 4 цифры года. Если вы хотите добавить больше проверок, это может быть:

(January|February|March|April|May|June|July|August|September|October|November|December), (19|20)\d{2}

Это новое регулярное выражение будет соответствовать из возможных допустимых месяцев, а также проверить, если год 19xx или 20xx.