我有一个大清单文件有条目的多线都具有相同的格式:如何打破这个文件用正则表达式在PHP
<item> xxxxx item details </item>
我想用正则表达式表达打破这种下降使preg_split的。所以我可以得到一个行数组,每个都是一个单独的项目条目。
新的正则表达式。想获得编写正确的正则表达式来定义XXXX的模式
像一些帮助:^(<item>)\w*(</item>)
,但我的测试总是产生错误。
感谢您的帮助。
我有一个大清单文件有条目的多线都具有相同的格式:如何打破这个文件用正则表达式在PHP
<item> xxxxx item details </item>
我想用正则表达式表达打破这种下降使preg_split的。所以我可以得到一个行数组,每个都是一个单独的项目条目。
新的正则表达式。想获得编写正确的正则表达式来定义XXXX的模式
像一些帮助:^(<item>)\w*(</item>)
,但我的测试总是产生错误。
感谢您的帮助。
不知道为什么你有额外的parens。为了检测0+非空格字符的字符串,并在一个字符串的开头让他们在一组:
^(\w*)
如果你想在你的XXX串,使用至少一个字符,而不是+:
^(\w+)
如果你想获得字符的第一组是不是空格:
^([^ ]+)
如果你想字符的第一组是没有空白:
^(\S+)
作为一个快速提示:使用+为1或更多的东西,使用*为0或更多的东西。
我觉得下面的模式应该这样做:
<item>\s*([^<])</item>
你需要使用preg_match_all让所有的物品,如果有不止一个:
preg_match_all('%<item>\s*([^<]+)</item>%', $db, $items);
$之后的商品将包含类似
array(2) {
[0]=>
array(2) {
[0]=>
string(28) "<item> 123456 qwerty </item>"
[1]=>
string(27) "<item>123 whatsoever</item>"
}
[1]=>
array(2) {
[0]=>
string(14) "123456 qwerty "
[1]=>
string(14) "123 whatsoever"
}
}
so $ item [1]将包含模式中括号内的数组。
我们在这里做的:第一,我们不限制记录是在与行的开头^。然后我们用\ s *标记后跳过空格。然后我们用(...)定义一组我们想要的字符作为输出。在它里面,我们用[......]来定义我们理解为物品信息的字符:该组中的任何字符都适合该模式。 ^在这组使得它不利,所以[^ <]将适合这不是一个<,这将有效地让我们结束标记任何字符。 如果你也想拆分项目信息分成几个部分(如项目ID,描述),你可以改变这种模式有点像:
<item>\s*(\d+)\s*([^<]+)</item>
那么结果将是:
array(3) {
[0]=>
array(2) {
[0]=>
string(28) "<item> 123456 qwerty </item>"
[1]=>
string(27) "<item>123 whatsoever</item>"
}
[1]=>
array(2) {
[0]=>
string(6) "123456"
[1]=>
string(3) "123"
}
[2]=>
array(2) {
[0]=>
string(7) "qwerty "
[1]=>
string(10) "whatsoever"
}
}
$ items [1]包含第一个括号内的内容,$ items [2] - 第二个组内的内容,如果添加更多,则以此类推。
猜猜我错过了你在xml标签中的事实。在这种情况下,你也需要识别这些,所以其他答案应该适合你。正则表达式开头的胡萝卜匹配字符串的开头,所以它只会在你的图案在字符串的开头 – afranz409 2011-03-09 05:25:12