Ответ 1
Вам не нужно бежать от него (это, вероятно, \b
, что отбрасывает его):
if (preg_match('/^\w+#(\w+)/', 'abc#def', $matches)) {
print_r($matches);
}
/* output of $matches:
Array
(
[0] => abc#def
[1] => def
)
*/
Очень просто, мне нужно сопоставить символ #
с помощью регулярного выражения. Я работаю над детектором хэштега.
Я попытался выполнить поиск в google и в переполнении стека. Один связанный пост здесь, но так как он хотел удалить символ # из строки, он не использовал регулярное выражение.
Я пробовал регулярные выражения /\b\#\w\w+/
и /\b#\w\w+/
, и они не работают, и если я удалю #
, он обнаружит слово.
Вам не нужно бежать от него (это, вероятно, \b
, что отбрасывает его):
if (preg_match('/^\w+#(\w+)/', 'abc#def', $matches)) {
print_r($matches);
}
/* output of $matches:
Array
(
[0] => abc#def
[1] => def
)
*/
#
не имеет особого значения в регулярном выражении, если вы не используете его как разделитель. Так что просто положите его прямо, и он должен работать.
Обратите внимание, что \b
определяет границу слова, а в #abc
граница слова находится после #
и перед abc
. Поэтому вам нужно использовать, \b
является излишним, и вам просто нужно #\w\w+
.
С комментариями к более раннему ответу вы хотите избежать соответствия x#x
.
В этом случае вам не нужно \b
, но \b
:
\B#(\w\w+)
(если вам действительно нужны два или более символа слова после #).
\b
означает NON-word-границу, и поскольку #
не является символом слова, это соответствует точно, если предыдущий символ не является символом слова.
Вы можете использовать следующее регулярное выражение: /\#(\w+)/
для соответствия хэштегу только с хэштеговским словом или: /\#\w+/
будет соответствовать всему хэштегом, включая хэш.
Для чего бы это ни стоило, мне удалось сопоставить символ хеша (#) в виде строки. В awk парсер вынимает комментарии как первое. Единственный синтаксис, который может "держать" #, это
"#"
Так что в моем случае я вычеркнул строки только с комментариями:
$1 == "#" { next; }
Я также попытался сделать хеш регулярным выражением:
HASH_PATTERN = "^#"
$1 ~ HASH_PATTERN { next; }
... это тоже работает. Поэтому я думаю, что вы можете поместить все выражение в строку вроде: HASH_PATTERN.
Строка equals работает довольно хорошо. Это не идеальное решение, просто стартер.