字符串看起来像超链接,例如http://somethings。这就是我需要的:
"
开头时才需要检查它们;我的意思是,只有那些字符:如果没有字符,它必须检查; somethings
字符串意味着除了空格(结束标记链接)之外,每种字符都可以使用(当然,这是一个链接);我知道,这是RFC允许的,但这是我知道逃避的唯一方式; htmlentities($str, ENT_QUOTES, "UTF-8")
进行过滤,这就是为什么可以使用各种字符的原因。它安全吗?或者我冒着xss或html破解的风险?这是我的实际正则表达式:
preg_replace('#\b[^"](((http|https|ftp)://).+)#', '<a class="lforum" href="$1">$1</a>', $str);
但是它只检查那些以“开头”的字符串,而我想要反过来。任何帮助回答这个问题都会很好,谢谢!
答案 0 :(得分:2)
对于你的两种情况,你都需要看后面的断言。
\b(?<!")(\w)\b
- 只有在"
(?<=ThisShouldBePresent://)(.*)
- 只有在你的字符串前面才能匹配正面的后视。答案 1 :(得分:1)
这样的事情:preg_match('/\b[^"]/',$input_string);
这会查找分词符(\b
),后跟除双引号([^"]
)以外的任何字符。
这样的事情:preg_match('~(((ThisShouldBePresent)://).+)~');
我假设您在问题中指定的括号(和加号)是作为正则表达式的一部分而不是要搜索的字符。
我也接受了@ ThiefMaster的建议并将分隔符更改为~
以避免逃脱//
。