Hashtag RegEx для SQL-запроса - PullRequest
3 голосов
/ 30 июля 2010

Поэтому я пытаюсь включить поиск по хештегу в сообщения в моем приложении.Я придумал несколько близких регулярных выражений, но ни одно из них не работает.Допустим, у меня есть строка:

#i keep #hashtags in my mom's attic. She says I am her number #1 son. Why I'm not num#ber #2: http://pics.com/pic#thepic

Я бы хотел, чтобы RegEx соответствовал:

  • i

  • хэштеги

  • 1

  • 2

Я хочу, чтобы он специально НЕ соответствовал объектам HTML, #anchorsв URL-адресах - хэштеги, начинающиеся с середины слова, и любые конечные знаки препинания после хэштега.Я также хочу убедиться, что он совпадает с хэштегом в начале строки, а также с полностью числовыми хештегами.Я хочу, чтобы в хэштегах также допускались дефисы и подчеркивания.Это для запроса MySQL, поэтому Lookaheads и Lookbacks не будут работать.

Текущий, на котором я застрял:

#([A-Za-z0-9_]+)

Но на самом деле он не выполняет свою работу.RegEx - это область, в которой мои знания немного не хватает.Спасибо за любую помощь!

Ответы [ 2 ]

2 голосов
/ 30 июля 2010

Следующее соответствует всем примерам, которые вы хотите найти, и отклоняет все те, которые вы не хотите соответствовать:

WHERE mycolumn REGEXP '^#[[:alnum:]]' OR mycolumn REGEXP ' #[[:alnum:]]'

Вам не нужно совпадать с хэштегом целом , поскольку SQL все равно не вернет эту строку, он просто возвращает 1 (совпадение) или 0 (без совпадения). Чтобы извлечь строку хештега, вам придется использовать некоторые другие манипуляции со строками в языке программирования вашего приложения.

0 голосов
/ 30 июля 2010

Я думаю, что вы застряли с тестированием в 3 раунда:

`txt` REGEXP '^#[0-9a-zA-Z]+[: ,]';
OR `txt` REGEXP '[: ,]#[0-9a-zA-Z]+[: ,]';
OR `txt` REGEXP '[: ,]#[0-9a-zA-Z]+$';

или вы могли бы, конечно, сделать

CONCAT(" ",`txt`," ") REGEXP '[: ,]#[0-9a-zA-Z]+[: ,]';

в любом случае, будет грязно. Конечно, [: ,] может быть расширено до того, что, по вашему мнению, не является частью таких вещей, как ' ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...