Regex: Как сопоставить все вхождения @something в строке - PullRequest
0 голосов
/ 02 июля 2011

Мне нужно найти все вхождения слова, которому предшествует символ «@», таким образом: @ soemthing.

пример:

string input = "<strong>@alias1</strong> is my first email but <em>@alias2.com</em> and <em>email@alias3</em> along with <strong>@alias4</strong> are disabled"

Iхотите совпадать только с @ alias1 и @ alias4, но не с @ alias.com или по электронной почте @ alias3

Спасибо

Ответы [ 5 ]

2 голосов
/ 02 июля 2011

Это должно работать ...

(?<=^|\s)@\w+(?=\s|$)

Для объяснения, (?<=^|\s) - это позитивный взгляд сзади, гарантирующий, что вы либо в начале строки, либо перед вашим соответствием есть символ пробела. И тогда (?=\s|$) является положительным прогнозом, гарантирующим, что после совпадения следует либо пробел, либо конец строки.

2 голосов
/ 02 июля 2011

Вы можете использовать следующее регулярное выражение:

/(?:^|\W)@[\w]+(?:\s|$)/
1 голос
/ 02 июля 2011

Я бы использовал это: (?<=(^|\s))@[a-zA-Z]+(?=(\s|$))

Это регулярное выражение говорит: "@ сопровождается буквами, но перед ними ставится пробел или начало строки, а следующий символ - пробел или конец строки".

Хотя в вашем примере не указано, если вы готовы принять символы подчеркивания, например, @some_thing, вы можете заменить [a-zA-Z] на \w

0 голосов
/ 02 июля 2011

Попробуйте с этим регулярным выражением:

@\w+
0 голосов
/ 02 июля 2011

Используйте следующее: \b@\w+\b

Вы не указали язык программирования, поэтому я предполагаю, что C #. Однако я не знаю, поддерживает ли C # "\ b".

EDIT:

Я приму комментарий Джастина и предложу \B@\w+(?=["'\s]|$).

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