Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 使用正则表达式从xml字符串获取节点_Ruby_Regex - Fatal编程技术网

Ruby 使用正则表达式从xml字符串获取节点

Ruby 使用正则表达式从xml字符串获取节点,ruby,regex,Ruby,Regex,我有如下字符串xml: <Query> <Code>USD</Code> <Description>United States Dollars</Description> <UpdateTime>2013-03-04 02:27:33</UpdateTime> <toUSD>1</toUSD> <USDto>1</USDto> <toE

我有如下字符串xml:

<Query>
  <Code>USD</Code>
  <Description>United States Dollars</Description>
  <UpdateTime>2013-03-04 02:27:33</UpdateTime>
  <toUSD>1</toUSD>
  <USDto>1</USDto>
  <toEUR>2</toEUR>
  <EURto>3</EURto>
</Query>

所有文本都在一行中,没有空格。我写不出正确的正则表达式模式。我希望得到以
开头的节点,尽管普遍的共识是使用正则表达式解析xml等不是可行的方法,但类似这样的方法应该可以做到:

<\s*(to[^>\s]+)[^>]*>([^<]+)<\s*/\s*\1\s*>

\s]+)[^>]*>([^]*>([^带nokogiri,xpath函数
开头:

require 'nokogiri'
doc = Nokogiri::XML <<EOF
<Query>
  <Code>USD</Code>
  <Description>United States Dollars</Description>
  <UpdateTime>2013-03-04 02:27:33</UpdateTime>
  <toUSD>1</toUSD>
  <USDto>1</USDto>
  <toEUR>2</toEUR>
  <EURto>3</EURto>
</Query>
EOF

doc.search('//*[starts-with(name(),"to")]').map &:to_s
#=> ["<toUSD>1</toUSD>", "<toEUR>2</toEUR>"]

哪种语言?最好使用一个真正的XML库(或xpath,或除正则表达式以外的任何语言)。在Ruby中。对我来说,这是一个简短的纯文本,所以我决定使用正则表达式。@user1931951:一些选项:即使对于简单的(-looking)正则表达式/XML,也几乎不值得,因为有很多选项可用。
require 'nokogiri'
doc = Nokogiri::XML <<EOF
<Query>
  <Code>USD</Code>
  <Description>United States Dollars</Description>
  <UpdateTime>2013-03-04 02:27:33</UpdateTime>
  <toUSD>1</toUSD>
  <USDto>1</USDto>
  <toEUR>2</toEUR>
  <EURto>3</EURto>
</Query>
EOF

doc.search('//*[starts-with(name(),"to")]').map &:to_s
#=> ["<toUSD>1</toUSD>", "<toEUR>2</toEUR>"]