php - 替换分号 (;),但不替换 html 字符(等)

标签 php javascript regex html-parsing smarty

我正在为我的问题寻找正则表达式。 我有一个文本(产品规范),例如:

length: 20cm; height: 10cm; «Night» mode: yes; manufacturer : Sony© manual : yes

最终结果应该是这样的

<tr><td>length</td><td>20cm</td></tr>
...
<tr><td>manufacturer</td><td>Sony&copy;</td></tr>

所以我应该替换":" + whitespace characters(\s*)对于 "</td><td>"";" + whitespace characters(\s*)对于 "</td></tr><tr><td>" ,但在有拉丁符号 [a-z]+ 的情况下则不然和&; 之前签名。 重点是在 html 字符中,例如 &_nbsp; &_laquo; &_copy 等包含“;”的

换句话说:\s*但不是&[a-z]+[;]

我该怎么做?

我在 smarty 中的正则表达式如下所示: "|regex_replace:"/[:]\s*/":""|regex_replace:"/[;]\s*/":"""所以唯一的就是删除 html 字符...我尝试了一些组合与 (?!...) 但没有成功 我正在寻找这样的东西 RegExp for matching three letters, but not text "BUY"

最佳答案

使用负向后查找来查找分号编码字符的一部分:

(?<!&[a-z]{2})(?<!&[a-z]{3})(?<!&[a-z]{4})(?<!&[a-z]{5});\s*

此正则表达式仅匹配裸露的分号。不幸的是,需要多个后视,因此涵盖了由于负后视需要固定长度表达式而导致的所有可能性。

查看live demo这个正则表达式。

关于php - 替换分号 (;),但不替换 html 字符(等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18402681/

相关文章:

javascript - angularjs 如果容器宽度小于 ul 元素

ios - Objective-C中的正则表达式:如何用动态模板替换匹配项?

php - MySQL/PHP 更新可变行数中的值

PHP 禁用来自特定文件的错误?

javascript - 借助 JavaScript 将 alt 和 title 标签添加到图像

java - 正则表达式将所有空 JSON 数组值替换为 null

regex - R 字符串来源

php - 这个大方法怎么重构呢?

php - 在没有API的情况下如何测试客户端?

javascript - 我如何自动填充输入文本框值使其与名称相同?