Строки выглядят как гиперссылки, такие как http: // somethings . Это то, что мне нужно:
"
, я имею в виду только те символы: если перед ними нет символов, он должен проверить; somethings
означает, что могут использоваться любые типы символов (конечно, это ссылка), за исключением пробела (ссылка конечного маркера); Я знаю, это разрешено RFC, но это единственный способ убежать; htmlentities($str, ENT_QUOTES, "UTF-8")
, поэтому можно использовать всевозможные символы. Это безопасно? Или я рискую проблемы с xss или html broked? Это мое текущее регулярное выражение:
preg_replace('#\b[^"](((http|https|ftp)://).+)#', '<a class="lforum" href="$1">$1</a>', $str);
Но он проверяет только те строки, которые START с ", и я хочу наоборот. Любые ответы на этот вопрос будут полезны, спасибо!
Что-то вроде этого: preg_match('/\b[^"]/',$input_string);
Это ищет слово-break ( \b
), за которым следует любой символ, кроме двойной кавычки ( [^"]
).
Что-то вроде этого: preg_match('~(((ThisShouldBePresent)://).+)~');
Я предположил, что скобки, которые вы указали в вопросе (и знак плюса), были предназначены как часть регулярного выражения, а не для поиска символов.
Я также принял совет @ ThiefMaster и изменил разделитель на ~
чтобы избежать необходимости избегать //
.
Для обоих ваших случаев вам понадобятся утверждения lookbehind.
\b(?<!")(\w)\b
– отрицательный lookbehind для соответствия только если не предшествует "
(?<=ThisShouldBePresent://)(.*)
– положительный lookbehind, чтобы соответствовать только в том случае, если предшествует ваша строка.