试图找出一种方法来抛弃此数据中没有任何值的属性。谢谢你的帮助。
我目前的正则表达式代码,感谢Tomalak看起来像这样
正则表达式
([^=|]+)=([^|]+)(?:\||$)
正则表达式替换
<dt>$1</dt><dd>$2</dd>
数据看起来像这样
刷毛材料= |线材=钢|直径= 4 in |砂砾= |刷毛直径= |线尺寸= 0.0095 in | Arbor Diam = |刀杆螺纹 - TPI或螺距= 1/2 - 3/8 in |没有。 of Knots = |面宽= 1/2 in |面板厚度= 7/16 in | Trim Length = 7/8 in | Stem Diam = | Speed = 6000 rpm [Max] | No。的行数= |颜色= |轮毂材料= |结构= |工具形状= |应用=清除锈蚀,污垢和污垢,轻度去毛刺,边缘混合,粘合粗糙,电镀或涂漆前的精加工准备|适用材料= |类型= |用于=直磨机,台式/立柱式磨床,直角磨床|包装类型= |数量=每包1个| Wt。=
最终结果应该是这样的
<dt>Wire Material</dt><dd>Steel</dd><dt>Dia.</dt><dd>4 in</dd><dt>Wire Size</dt><dd>0.0095 in</dd>
不是这个
Bristle Material=|<dt>Wire Material</dt><dd>Steel</dd><dt>Dia.</dt><dd>4 in</dd>Grit=|Bristle Diam=|<dt>Wire Size</dt><dd>0.0095 in
答案 0 :(得分:2)
以下是如何在不使用正则表达式的情况下在PHP中执行此操作:
$parts_list = explode('|', "Bristle Material=|Wire M....");
$parts = "";
foreach( $parts_list as $part ){
$p = explode('=', $part);
if(!empty($p[1])) $parts .= "<dt>$p[0]</dt>\n<dd>$p[1]</dd>\n";
}
echo $parts;
以下是使用正则表达式的方法:
$parts = preg_replace(
array('/([^=|]*)=(?:\||$)/','/([^=|]*)=([^|]+)(?:\||$)/'),
array('', '<dt>$1</dt><dd>$2</dd>'),
$inputString
);
echo $parts;
<强>更新强>
这是使用PHP preg_replace
的一个特殊替换功能,它采用一组正则表达式和一个替换字符串数组。函数的array()
语法基本上等同于:
如果我可以匹配:
/([^=|]*)=(?:\||$)/
然后用空字符串替换它 如果我可以匹配:/([^=|]*)=([^|]+)(?:\||$)/
,请将其替换为<dt>$1</dt><dd>$2</dd>
要在Regex编辑器中测试它,首先运行第一个表达式(/([^=|]*)=(?:\||$)/
),然后在第一个表达式的结果上运行第二个表达式。
答案 1 :(得分:0)
([^=|]*)=([^|]*)(?:\||$)
跳过没有值的那些,试试这个:
(?:[^=|]*=|([^=|]*)=([^|]+))(?:\||$)
答案 2 :(得分:0)
好像你想要preg_match
而不是preg_replace
preg_match_all('~([^|]+)=([^|\s][^|]*)~', $str, $matches, PREG_SET_ORDER);
foreach($matches as $match)
echo "<dt>{$match[1]}</dt><dd>{$match[2]}</dd>\n";