2011-05-09 31 views
0

这些字符串看起来像超链接,如http://somethings。这是我需要的:如何为“解析”HTML链接创建自己的正则表达式?

  1. 我需要检查他们,只有当他们不开始与字符";我的意思是,只有那些角色:如果之前没有角色,它必须检查;
  2. somethings字符串意味着除了空格(结束标记链接)外,每种字符都可以使用(当然是链接);我知道,这是RFC允许的,但是我知道要逃脱的唯一方法是;
  3. 这些字符串以前使用htmlentities($str, ENT_QUOTES, "UTF-8")过滤,这就是为什么可以使用每种字符。它安全吗?或者我冒着xss或html中断的问题冒险?
  4. 这个替换的发生可以是多重的,不仅是1,并且必须是不区分大小写的;

这是我的实际正则表达式:

preg_replace('#\b[^"](((http|https|ftp)://).+)#', '<a class="lforum" href="$1">$1</a>', $str); 

但只检查那些与” START串,我想相反的任何帮助回答这个问题将是一件好事,感谢

+0

1 - 你需要的话分成单独的字符串。然后,正则表达式是'[^“] *' – Joe 2011-05-09 11:27:19

+0

[^”]应该工作,但是,如果这个词是它不第一个字(因为之前没有任何字符。 – kwichz 2011-05-09 11:30:24

回答

1
  1. 事情是这样的:preg_match('/\b[^"]/',$input_string);

    这看起来一个字断(\b),其次是除引号([^"])以外的任何字符。

  2. 事情是这样的:preg_match('~(((ThisShouldBePresent)://).+)~');

    我假设你的问题(以及加号)规定的括号旨在为正则表达式,而不是文字来搜索的一部分。

    我也采取了@ ThiefMaster的建议,并将分隔符更改为~,以避免必须逃脱//

+0

您可能需要使用不同的分隔符(2),所以你没有一个逃脱的地狱 - ''#将做的工作精细例如 – ThiefMaster 2011-05-09 11:30:14

+0

@Thief - 但我喜欢* *有逃避我的斜杠。它使正则表达式的语法更加钝耶;-)(但是请注意,我已经编辑它使用替代字符) – Spudley 2011-05-09 11:35:37

+0

想你的例子! ,但它不起作用(也许我们误解)。我编辑我的话题更简明的解释;) – kwichz 2011-05-09 16:04:23

2

对于您的两个情况下,你会想向后断言

  1. \b(?<!")(\w)\b - 如果不是通过前面012负回顾后仅匹配
  2. (?<=ThisShouldBePresent://)(.*) - 只有在字符串前面匹配才能匹配的正向lookbehind。
+0

编辑与其他一些更多资讯专题(因为这实际上是行不通的这么好);请让我知道,感谢您的时间 – kwichz 2011-05-09 16:04:51