Как сопоставить символ фунта (#) в регулярном выражении в php (для хэштегов)

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

Я попытался выполнить поиск в google и в переполнении стека. Один связанный пост здесь, но так как он хотел удалить символ # из строки, он не использовал регулярное выражение.

Я пробовал регулярные выражения /\b\#\w\w+/ и /\b#\w\w+/, и они не работают, и если я удалю #, он обнаружит слово.

Ответ 1

Вам не нужно бежать от него (это, вероятно, \b, что отбрасывает его):

if (preg_match('/^\w+#(\w+)/', 'abc#def', $matches)) {
    print_r($matches);
}

/* output of $matches:
Array
(
    [0] => abc#def
    [1] => def
)
*/

Ответ 2

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

Обратите внимание, что \b определяет границу слова, а в #abc граница слова находится после # и перед abc. Поэтому вам нужно использовать, \b является излишним, и вам просто нужно #\w\w+.

Ответ 3

С комментариями к более раннему ответу вы хотите избежать соответствия x#x. В этом случае вам не нужно \b, но \b:

\B#(\w\w+)

(если вам действительно нужны два или более символа слова после #).

\b означает NON-word-границу, и поскольку # не является символом слова, это соответствует точно, если предыдущий символ не является символом слова.

Ответ 4

Вы можете использовать следующее регулярное выражение: /\#(\w+)/ для соответствия хэштегу только с хэштеговским словом или: /\#\w+/ будет соответствовать всему хэштегом, включая хэш.

Ответ 5

Для чего бы это ни стоило, мне удалось сопоставить символ хеша (#) в виде строки. В awk парсер вынимает комментарии как первое. Единственный синтаксис, который может "держать" #, это

"#"

Так что в моем случае я вычеркнул строки только с комментариями:

$1 == "#" { next; }

Я также попытался сделать хеш регулярным выражением:

HASH_PATTERN = "^#"

$1 ~ HASH_PATTERN { next; }

... это тоже работает. Поэтому я думаю, что вы можете поместить все выражение в строку вроде: HASH_PATTERN.

Строка equals работает довольно хорошо. Это не идеальное решение, просто стартер.