php
  • regex
  • 2011-11-28 191 views 0 likes 
    0

    我需要一个正则表达式来从字符串中去除单行注释,但是保持URL不变。代码应与东西合作是这样的: PHP:正则表达式来查找以双斜杠开头的注释//

    //Some Comment on http://bobobo.com where bla < 5 
    <script type="text/javascript" src="http://bububu.com"></script> 
    <script type='text/javascript' src='http://bababa.com'></script> 
    

    编辑:当然,我不使用的注释,在HTML文件中。正确的例子将是

    <script type="text/javascript"> 
        //Some Comment on http://bobobo.com where bla < 5 
    </script> 
    <script type="text/javascript" src="http://bububu.com"></script> 
    <script type='text/javascript' src='http://bababa.com'></script> 
    

    我不好,抱歉误导。

    一个可能的解决方案应该找到 “//上http://bobobo.com其中BLA < 5的一些评论”,而不是 “//bububu.com”>”和 “//bababa.com”>“。

    感谢任何提示...

    +5

    Do ** NOT **使用正则表达式来处理html:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags –

    +0

    @Marc B:剥离出单行评论会没事的。 – Tomalak

    +0

    @Tomalak:也许吧,但是当你试图找出一个特定的评论实际上是一个评论,或者一个埋在一个属性中的网址,或者实际上是一个纯文本网址。 –

    回答

    0

    的正则表达式是^//

    preg_replace(),你会使用字符串'!^//!',例如该!作为一个正则表达式分隔符,以避免倾斜牙签综合症'/^\/\//')。

    如果您的线条可以以空格开头,则可以使用^\s*//

    +1

    那些缩小了一定数量的评论呢? –

    +0

    @Marc B:见第三段。如果事情变得比这更复杂,那么必须定义非常明确的规则(或者正则表达式不是选项)。 – Tomalak

    0

    你也可以使用这个本身

    /(?!http:)\/\// 
    
    +1

    https呢? FTP? Skype的?蒸汽? –

    +0

    @MarcB OP就专门讨论http。我想它可以写成/(?![a-z] +:)\/\ // – Cfreak

    1

    简短的回答是剥离不一行出现注释:没有。原因是单行注释不是HTML中的有效注释。他们只是文本标记。你不应该在你的代码中拥有它们。在将它们插入源代码之前将其消除。


    我想给你使用PHP的DomDocumentDomXPath,但它只支持XPath 1.0的备选答案,和替换功能不存在,直到2.0。我不熟悉XPath 1.0能够替换DOM中的字符串。下面是你需要什么做虽然:

    1. 选择所有的文本节点(会忽略的属性,因为它们不是文本节点)
    2. 更换\s*//.*(点不匹配换行符)与“”。
    3. 将文本重新插入节点。
    +0

    \ s * //如果注释位于文件的第一行,则不匹配。 – Kaii

    +0

    @Kaii我可能是错的,但我认为这是一个可能无关紧要的实现细节。您正在使用通常会考虑到这一点的替换机制。 –

    0
    preg_replace('~^\h?//(^$)~m', '', $html); 
    

    替换//直到与“”的线的端部,与前它可选水平空白。没有测试,但类似的东西应该工作。

    0

    谢谢大家,但最后

    preg_match('!//.*?\n!', $data, $matches); 
    

    似乎这样的伎俩带或不带空格,制表符或新行注释前。

    相关问题