Я использую регулярное выражение для поиска кучи ключевых слов в тексте.Как найти строку, содержащую квадратную скобку?
Все ключевые слова, которые были найдены, но один: [DAM] Berlin. Я знаю, что он содержит квадратную скобку, поэтому я избежал ее, но все равно не повезло. Что я делаю не так?
вот мой код php.
Текст для поиска по ключевым словам:
$textToSearch= '<p><br>
Time ¦ emit LAb[au] <br>
<br>
[DAM]Berlin gallery<br>
<br>
Exhibition: February 21st - March 28th, 2009 <br>
<br>
Opening: Friday, February 20th, 2009 7-9 pm <br>';
Регулярное выражение:
$find='/(?![^<]+>)\b(generative art console|Game of Life|framework notations|framework|Floating numbers|factorial|f5x5x3|f5x5x1|eversion|A-plus|16n|\[DAM\]Berlin gallery)\b/s';
заменить функцию обратного вызова:
function replaceCallback($match)
{
if (is_array($match))
{
$htmlVersion = htmlspecialchars($match[1], ENT_COMPAT, 'UTF-8');
$urlVersion = urlencode($match[1]);
return '<a class="tag" rel="tag-definition" title="Click to know more about ' . $htmlVersion . '" href="?tag=' . $urlVersion. '">'. $htmlVersion . '</a>';
}
return $match;
}
и, наконец, вызов:
$tagged_content = preg_replace_callback($find, 'replaceCallback', $textToSearch);
Благодарим за помощь!
Я попробовал ваше предложение, однако php возвращает предупреждение. Есть ли альтернатива флагову b? вот предупреждение: preg_replace_callback(): Ошибка компиляции: совпадающие скобки при смещении 166 – pixeline
Удалите закрытие parenthese в конце \ b)/s (этот) – jitter
Это может быть ближе к исходному намерению, так как оно будет все еще проверяйте, что «[Dam]» не следует за символом слова: $ find = '/ (?! [^ <]+>) (?