Строки выглядят как гиперссылки, такие как 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, чтобы соответствовать только в том случае, если предшествует ваша строка.