我需要一个可以帮助我进行regxp的人。 我解释了我的问题。
在ckeditor中传阅后,我的文字是这样的:
lorem ipsum #12345, this is a <span style="color: #111111">colored text</span>
我想重写此文本以进行转换
#1234
在
<a href="/php/design/text.php?occ=1234">#1234</a>
我做
$text = preg_replace('/#([0-9]+)/', '<a href="/php/design/text.php?occ=$1">#$1</a>', $CommentText);
但是这个方法的颜色代码#111111也改变了。
你能帮我写一个正确的正则表达式来解决我的问题(总是改变#1212但是如果这个代码是在一个样式属性中则不行。
非常感谢你的帮助
答案 0 :(得分:1)
你不能用PHP正则表达式做到这一点。您必须使用HTML解析器来提取HTML文档的文本并对其进行操作。
正如您已经充分解释的那样,您遇到的问题是CSS样式可以包含十六进制颜色模式(不仅仅是color
)。
使用正则表达式解决问题的最接近的解决方案是负面的后视,但PCRE不支持任意长度的外观(只有.NET语言)。即使它确实如此,你也必须设计一个正则表达式以匹配所有可能的情况。
不要那样做。使用HTML解析器并将您的正则表达式(几乎可以使用)与文本内容匹配。
答案 1 :(得分:0)
你可以尝试这样的基于条件子模式的正则表达式代码:
$CommentText = 'lorem ipsum #12345, this is a <span style="color: #12345">colored text</span>';
$r = "~#(12345).*?((<)(?(3)[^>]*>))~i";
$s = preg_replace($r, "<a href='/php/design/text.php?occ=$1'>#$1</a>$2", $CommentText);
echo "$s\n";
<强>输出:强>
lorem ipsum <a href='/php/design/text.php?occ=12345'>#12345</a><span style="color: #12345">colored text</span>