Regex, чтобы найти слова, которые начинаются с определенного символа - PullRequest
19 голосов
/ 21 апреля 2010

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

Lorem ipsum #text Второй Lorem ipsum. Как твои дела. Все нормально. Готово. Что-то # еще сейчас.

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

Есть идеи?

Ответы [ 4 ]

34 голосов
/ 21 апреля 2010

Поиск:

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

Так попробуйте это:

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

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

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

Выход:

#text
#are
#else
12 голосов
/ 21 апреля 2010

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

3 голосов
/ 21 апреля 2010

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

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

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

(?:...) - это группа без захвата.

0 голосов
/ 17 марта 2019

Для размещения на разных языках у меня есть это (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'.

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