PHP RegEx的乐趣(preg_replace)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP RegEx的乐趣(preg_replace),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3593字,纯文字阅读大概需要6分钟。
内容图文
因此,我有一个表单元素正在提交给我构建的应用程序中的控制器/模型,我需要剥离不符合我的要求的所有HTML,并将其他HTML转换为该应用程序的专有标签,对此我感到疑惑是有人可以查看我的正则表达式preg_replace并查看可以进行哪些改进.
$postText = $_POST['post_text'];
//Regex Functions
$p1 = '~<span class=\"atwho-view-flag atwho-view-flag-#\" c>|<span c class \"atwho-view-flag atwho-view-flag-#\">|<span c class \"atwho-view-flag atwho-view-flag-@\">|<span contenteditable=\\"false\\" class=\\"atwho-view-flag atwho-view-flag-@\\">|<span contenteditable=\\"false\\" class=\\"atwho-view-flag atwho-view-flag-#\\">|</span>|<span>|<span c>|<span contenteditable=\\"false\\">| | |<br>~';
$r1 = '';
$start = preg_replace($p1, $r1, $postText);
$clean = str_replace('_','',$start);
$users = preg_replace("~(<var data-type=\"user\" class=\"userHighlight\" id=\"(.*?)\">)(.*?)(</var>)~", "<_link>$2|$3</_link> ", $clean);
$tags = preg_replace("~(<var data-type=\"tag\" class=\"tagHighlight\" id=\"(.*?)\">)#(.*?)(</var>)~", "<_link>tag://$3|#$3</_link> ", $users);
$last = preg_replace("~(^|\\s)#(\\w*[a-zA-Z_]+\\w*)~", " <_link>tag://$2|#$2</_link> ", $tags);
$spaces = preg_replace("~(^ | )~", " ", $last);
$divs = preg_replace("~(?:</?div>)+~", "\r\n", $spaces);
$final = preg_replace("~(<br>)~", "\r\n", $divs);
我正在使用一个内容可编辑的div,该div使用at.js by ichord库来进行哈希标记和用户提及,我本质上想转换以下标记(如上所示)
发表内容:
<span contenteditable="false" class="atwho-view-flag atwho-view-flag-#"><var data-type="tag" class="tagHighlight" id="tag://4">#Hashtag</var><span contenteditable="false"> <span></span></span></span>is <span contenteditable="false" class="atwho-view-flag atwho-view-flag-#"><var data-type="tag" class="tagHighlight" id="tag://2">#AnotherHashtag</var><span contenteditable="false"> <span></span></span></span>and <span contenteditable="false" class="atwho-view-flag atwho-view-flag-@"><var data-type="user" class="userHighlight" id="user://82">A Username </var><span contenteditable="false"> <span></span></span></span>made it so...
井号:
<var data-type="tag" class="tagHighlight" id="tag://2">#AnotherHashtag </var>
用户提及:
<var data-type="user" class="userHighlight" id="user://82">A Username </var>
总的来说,我的PHP可以正常工作,但有时我会得到不需要的虚假HTML.
最后,preg_replace()中还有一些其他元素用于处理回车,在我的内容可编辑的情况下,这些回车将以< div>< / div>发送.或< br>元素,我需要保留回车符.
希望我已经尽可能清楚地解释了这一切,在此先感谢您的帮助.
解决方法:
也许这对您有帮助
我假设您只是对< var>-标记有兴趣(好吧,出于格式化目的,在< div>和< br>中也是如此),因此只需删除所有其他标记(使用不带正则表达式的字符串函数通常是如果速度不是不重要的更好方法)是PHP function strip_tags(strip_tags($postText,’< var>< div>< br>‘))
替换< var> ;、< div>之外的所有其他标签.或< br>和 带空格的实体
$clearedText = str_replace(
' ',
' ',
strip_tags($postText, '<var><div><br>')
);
通过trim(…)修剪尾部和前导空格后,将所有空格合并为一个
$clearedText = preg_replace(
'~\s+~',
' ',
trim($clearedText)
);
替换所有出现的< div>< / div>和< br> Windows换行
$clearedText = preg_replace(
'~<div></div>|<br\s*/?>~',
"\r\n",
$clearedText
);
转换< var>标记< _link>标签
$linkText = preg_replace(
'~<(var)[^>]*id="((?:tag|user)://\d+)"[^>]*>((?:[^<]+|<(?!/\1>))*)</\1>~',
'<_link>\2|\2</_link>',
$clearedText
);
固定< _link>的内容内容为tag:// NUMBER | #HASH且标签内容正确的标签为://:// HASH | #HASH
$linkText = preg_replace(
'~(?<=tag://)\d+(\|#(\w+))~',
'\2\1',
$linkText
);
为了更好地理解最后两个正则表达式:
<(var)[^>]*id="((?:tag|user)://\d+)"[^>]*>((?:[^<]+|<(?!/\1>))*)</\1>
(?<=tag://)\d+(\|#(\w+))
内容总结
以上是互联网集市为您收集整理的PHP RegEx的乐趣(preg_replace)全部内容,希望文章能够帮你解决PHP RegEx的乐趣(preg_replace)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。