Подтвердить что ты не робот

Regex найти слова, начинающиеся с определенного символа

Я пытаюсь найти слова, начинающиеся с определенного символа, например:

Lorem ipsum #text Второй лорам ipsum. Как дела. Все в порядке. Готово. Что-то теперь.

Мне нужно, чтобы все слова начинались с "#". поэтому мои ожидаемые результаты: #text, #are, #else

Любые идеи?

4b9b3361

Ответ 1

Искать:

  • то, что не является символом слова, тогда
  • #
  • некоторые символы слова

Итак, попробуйте следующее:

/(?<!\w)#\w+/

Или в С# это будет выглядеть так:

string s = "Lorem ipsum #text Second lorem ipsum. How #are You. It ok. Done. Something #else now.";
foreach (Match match in Regex.Matches(s, @"(?<!\w)#\w+"))
{
    Console.WriteLine(match.Value);
}

Вывод:

#text
#are
#else

Ответ 2

Попробуйте #(\S+)\s?

Ответ 3

Сопоставьте слово, начинающееся С# после пробела или начала строки. Последняя граница слова не обязательно в зависимости от вашего использования.

/(?:^|\s)\#(\w+)\b/

Скобки заключат ваше слово в группу. Теперь, это зависит от языка, как вы применяете это регулярное выражение.

(?:...) - не захватывающая группа.

Ответ 4

Для размещения на разных языках у меня есть это (PCRE/PHP):

'~(?<!\p{Latin})#(\p{Latin}+)~u'

или же

$language = 'ex. get form value';
'~(?<!\p{' . $language . '})#(\p{' . $language . '}+)~u'

или пролистать несколько скриптов

$languages = $languageArray;

$replacePattern = [];

foreach ($languages as $language) {

  $replacePattern[] = '~(?<!\p{' . $language . '})#(\p{' . $language . '}+)~u';

}

$replacement = '<html>$1</html>';

$replaceText = preg_replace($replacePattern, $replacement, $text);

\w прекрасно работает, но, насколько я видел, только для латинского алфавита.

Переключите Latin на Cyrillic или Phoenician в приведенном выше примере.

Приведенный выше пример не работает для скриптов 'RTL'.

Ответ 5

Код ниже должен решить дело.

  • /\$(\w)+/g Ищет слова, начинающиеся с $
  • /#(\w)+/g Ищет слова, начинающиеся с #

Ответ /(?<!\w)#\w+/ данный Марком Байерсом, выдает предупреждение, как RegExr.com ниже на сайте RegExr.com

"(?<!" The "negative lookbehind" feature may not be supported in all browsers.

предупреждение можно исправить, изменив его на (?!\w)@\w+, удалив >