相关疑难解决方法(0)

您能否举例说明为什么用正则表达式解析XML和HTML很困难?

一个错误我看到人们做,并再次试图解析XML或HTML用正则表达式.以下是解析XML和HTML很难的几个原因:

人们希望将文件视为一系列行,但这是有效的:

<tag
attr="5"
/>
Run Code Online (Sandbox Code Playgroud)

人们希望将<或<tag视为标记的开头,但是这样的东西存在于野外:

<img src="imgtag.gif" alt="<img>" />
Run Code Online (Sandbox Code Playgroud)

人们通常希望将起始标记与结束标记匹配,但XML和HTML允许标记包含自身(传统的正则表达式根本无法处理):

<span id="outer"><span id="inner">foo</span></span> 
Run Code Online (Sandbox Code Playgroud)

人们通常希望匹配文档的内容(例如着名的"查找给定页面上的所有电话号码"问题),但数据可能会被标记(即使在查看时看起来是正常的):

<span class="phonenum">(<span class="area code">703</span>)
<span class="prefix">348</span>-<span class="linenum">3020</span></span>
Run Code Online (Sandbox Code Playgroud)

评论可能包含格式不正确或不完整的标记:

<a href="foo">foo</a>
<!-- FIXME:
    <a href="
-->
<a href="bar">bar</a>
Run Code Online (Sandbox Code Playgroud)

你还知道其他什么问题?

html regex xml

397
推荐指数
10
解决办法
4万
查看次数

Regex/DOMDocument - 匹配和替换不在链接中的文本

我需要以不区分大小写的方式查找和替换所有文本匹配项,除非文本位于锚标记内 - 例如:

<p>Match this text and replace it</p>
<p>Don't <a href="/">match this text</a></p>
<p>We still need to match this text and replace it</p>
Run Code Online (Sandbox Code Playgroud)

搜索"匹配此文本"只会替换第一个实例和最后一个实例.

[编辑]根据戈登的评论,在这个例子中可能更喜欢使用DOMDocument.我对DOMDocument扩展并不熟悉,并且非常感谢这个功能的一些基本示例.

php regex xpath preg-replace domdocument

12
推荐指数
2
解决办法
6366
查看次数

如何用&nbsp;替换HTML元素中的所有空格 使用preg_replace?

我需要用&nbsp;内部HTML元素替换空格.例:

<table atrr="zxzx"><tr>
<td>adfa a   adfadfaf></td><td><br /> dfa  dfa</td>
</tr></table>
Run Code Online (Sandbox Code Playgroud)

应该成为

<table atrr="zxzx"><tr>
<td>adfa&nbsp;a&nbsp;&nbsp;&nbsp;adfadfaf></td><td><br />&nbsp;dfa&nbsp;&nbsp;dfa</td>
</tr></table>
Run Code Online (Sandbox Code Playgroud)

html php spaces preg-replace

6
推荐指数
2
解决办法
2万
查看次数

PHP正则表达式替换链接url

我需要在href="之前添加http://如果http://不遵循href="src="

以下代码部分有效.部分意味着它只考虑<a href="但不考虑src="

$str= preg_replace( 
    "/(?<!a href=\")((http|ftp)+(s)?:\/\/[^<>\s]+)/i", 
    "<a href=\"\\0\"> target=\"blank\">\\0</a>", 
    $str
);
Run Code Online (Sandbox Code Playgroud)

谢谢你们提前回复.

php regex

5
推荐指数
1
解决办法
5850
查看次数

php - 自动检测链接并将它们放入<a>标签中,除非它们已经在html标签中

我找到了一个自动检测链接并将它们放在<a>标签中的解决方案:Regex PHP - 自动检测YouTube,图像和"常规"链接

相关部分(preg_replace_callback出于兼容性原因,我不得不在调用之外移动函数):

function put_url_in_a($arr)
    {
    if(strpos($arr[0], 'http://') !== 0)
        {
            $arr[0] = 'http://' . $arr[0];
        }
        $url = parse_url($arr[0]);

        //links
        return sprintf('<a href="%1$s">%1$s</a>', $arr[0]);
    }

$s = preg_replace_callback('#(?:https?://\S+)|(?:www.\S+)|(?:\S+\.\S+)#', 'put_url_in_a', $s);
Run Code Online (Sandbox Code Playgroud)

这样可以正常工作,除非它偶然发现标签中的网址,然后将其标记为废弃(通过在其中添加另一个标记).它也破坏了嵌入式媒体.

问题:如何使用此函数排除HTML标记,希望只使用正则表达式?

html php regex url

4
推荐指数
1
解决办法
5769
查看次数

标签 统计

php ×4

regex ×4

html ×3

preg-replace ×2

domdocument ×1

spaces ×1

url ×1

xml ×1

xpath ×1