У меня есть словарь нецензурных слов в базе данных, и следующее отлично работает
preg_match_all("/\b".$f."(?:ing|er|es|s)?\b/si",$t,$m,PREG_SET_ORDER);
$ t
- это вводимый текст и просто $ f = preg_quote ("панк")
; «панк»
взят из словаря базы данных, поэтому в этот момент в цикле выражение выглядит следующим образом
preg_match_all("/\bpunk(?:ing|er|es|s)?\b/si",$t,$m,PREG_SET_ORDER);
У меня есть словарь ненормативной лексики в базе данных, и следующий код отлично работает У меня есть словарь нецензурных слов в базе данных, и следующий код отлично работает Любые предложения о том, как Я могу обнаружить Изменить: Поэтому я предполагаю, что выражение, которое не работает должным образом, будет, например, Что должно найти f @ck в ОБНОВЛЕНИЕ: Это мое использование, проще говоря; если есть совпадения в ОБНОВЛЕНИЕ:
Вот ОБНОВЛЕНИЕ:
Это происходит только тогда, когда слова заканчиваются символом. Я протестировал ДРУГОЕ ОБНОВЛЕНИЕ:
Попробуйте эту упрощенную версию, . Я должен ожидать увидеть preg_quote
заменяет символы, например. #
с \\ #
, чтобы выражение было экранировано, но когда словарь проверяет, например. "
preg_match_all("/\b".$f."(?:ing|er|es|s)?\b/si",$t,$m,PREG_SET_ORDER);
$ t
- это входной текст и просто $ f = preg_quote ("punk")
; «панк»
взят из словаря базы данных, поэтому на данном этапе цикла выражение выглядит следующим образом preg_match_all("/\bpunk(?:ing|er|es|s)?\b/si",$t,$m,PREG_SET_ORDER);
preg_quote
заменяет символы, например. #
с \\ #
, чтобы выражение было экранировано, но когда словарь проверяет, например. "
preg_match_all("/\b".$f."(?:ing|er|es|s)?\b/si",$t,$m,PREG_SET_ORDER);
$ t
- это вводимый текст, и просто $ f = preg_quote ("punk")
; «панк»
взят из словаря базы данных, поэтому на данном этапе цикла выражение выглядит следующим образом preg_match_all("/\bpunk(?:ing|er|es|s)?\b/si",$t,$m,PREG_SET_ORDER);
preg_quote
заменяет символы, например. #
с \\ #
, чтобы выражение было экранировано, но когда словарь проверяет, например. "
#
с \\ #
, чтобы выражение было экранировано, но когда словарь проверяет, например. "
#
с \\ #
, чтобы выражение было экранировано, но когда словарь проверяет, например. "F @ CK "
или " A $$ "
эти символы не обнаруживаются во входной строке с указанным выше выражением, у меня есть и a $$
, и f @ck
в словаре, но они не работают. Если я удалю preg_quote ()
в слове, регулярное выражение станет недействительным, поскольку эти символы не экранированы. "a $$"
??? preg_match_all("/\bf\@ck(?:ing|er|es|s)?\b/si",$t,$m,PREG_SET_ORDER);
$ t
$ m
, замените их на "\ * \ * \ * \ *"
, весь этот блок находится внутри цикла по каждому слову в словаре, $ f
- это слово из словаря, а $ t
- это вход $f = preg_quote($f);
preg_match_all("/\b$f(?:ing|er|es|s)?\b/si",$t,$m,PREG_SET_ORDER);
if (count($m) > 0) {
$t = preg_replace("/(\b$f(?:ing|er|es|s)?\b)/si","\*\*\*\*\*",$t);
}
var_dump
: preg_quote($f) = string(5) "a\$\$"
$t = string(18) "You're such an a$$"
expression = string(29) "/\ba\$\$(?:ing|er|es|s)?\b/si"
«a $$ hole»
, и все в порядке, но «$$»
не работает. $ words
- это временный словарь $words = array("a$$","asshole","a$$hole","f@ck","f#ck","f*ck");
$text = "Input whatever you feel like here eg. a$$";
foreach ($words as $f) {
$f = preg_quote($f,"/");
$text = preg_replace("/\b".$f."(?:ing|er|es|s)?\b/si",
str_repeat("*",strlen($f)),
$t);
}
«Введите здесь все, что вам нравится, например. \ * \ * \ *»
как результат.