php提取99来自字符串正则表达式

时间:2011-02-15 14:30:50

标签: php

我有一个字符串:

tomato='36'/></carrot

由此我尝试使用正则表达式提取36。我正在使用:

"/tomato='(.*)'\/>/"

这提取开始确定,但不提取其余部分。任何想法如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

您应该专注于正则表达式,以便只匹配数字字符:

"/tomato='(\d+)'\/>/"

答案 1 :(得分:0)

以下是一些有助于构建正则表达式的工具:https://stackoverflow.com/questions/89718/is-there-anything-like-regexbuddy-in-the-open-source-world

在您的情况下,您可能希望匹配\d+小数。

根据实际使用情况,如果您不使用regexp,可能会更简单,但是DOM解析器(1)可以简化属性提取:

pq($xml)->find("recipe")->attr("tomato");

答案 2 :(得分:0)

鉴于您提供的非常具体的示例,以及您要提取的特定数据,它非常简单;你的正则表达式可以忽略除数字字符以外的所有内容:

"/\d+/"

如果输入字符串可能有所不同,并且您特别想要找到tomato属性的值,那么:

"/tomato='(\d+)'/"

不太可能真正需要匹配字符串的其余部分 - 实际上,考虑到XML的变量,它更可能导致问题。

但问题是,你究竟想在这做什么?它看起来非常像你正在尝试解析HTML / XML流,但你是如何最终得到这个奇怪的块?你做过explode(' ',$xml);吗?

您可能会发现从XML流中提取数据的更具可扩展性和可管理性的方法是使用DOM解析器。正则表达式可以工作,但HTML / XML往往有足够的格式变化,如果你想确定获得你想要的数据,你最终得到一些非常可怕的正则表达式字符串;在这方面,DOM解析器往往更加可靠。

我建议您研究一下PHP的内置DOM解析器:http://www.php.net/dom

希望有所帮助。

答案 3 :(得分:0)

尝试匹配第一个引号,然后抓取所有不是引号字符的内容:

/tomato='([^']*)'/

如果您不知道引号之间的内容,此方法很有效,但如果最终引号丢失,或者您使用双引号而不是单引号,则此方法会失败。