我正在为我的问题寻找正则表达式。 我有一个文本(产品规格),例如:
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©</td></tr>
所以我应该为":" + whitespace characters(\s*)
替换"</td><td>"
,为";" + whitespace characters(\s*)
替换"</td></tr><tr><td>"
,但在有拉丁符号[a-z]+
和{{1}的情况下不能在&
之前签名。
重点是html字符,如&amp; _nbsp; &安培; _laquo; &amp; _copy等包含“;”
换句话说;
但不是:\s*
。
我该怎么做?
我在smarty中的正则表达如下: “| regex_replace:”/ [:] \ s * /“:”“| regex_replace:”/ [;] \ s * /“:”“”所以唯一的办法是删除html字符...我尝试了一些组合(?!...)但没有成功 我正在寻找这样的东西 RegExp for matching three letters, but not text "BUY"
答案 0 :(得分:2)
使用负面后卫查找分号而不是编码字符的一部分:
(?<!&[a-z]{2})(?<!&[a-z]{3})(?<!&[a-z]{4})(?<!&[a-z]{5});\s*
这个正则表达式只匹配裸露的半冒号。不幸的是,需要多个后视镜,以涵盖所有可能性,因为需要固定长度表达的负面外观。
查看此正则表达式的live demo。
答案 1 :(得分:0)
如果您必须使用正则表达式,则可以这样执行:
\w : ; &
©
替换为@@@copy###
: ;
替换为<td>
now @@@copy###
替换为©
答案 2 :(得分:0)
怎么样:
$str = 'length: 20cm; height: 10cm; «Night» mode: yes; manufacturer : Sony© manual : yes';
$str = preg_replace('#(?!&[a-z]+); #', '</td></tr><tr><td>', $str);
$str = preg_replace('#: #', '</td><td>', $str);