Java 在两个引号之间获取字符串

Java 在两个引号之间获取字符串,java,regex,Java,Regex,如何在value=之后的两个引号之间获得一个值 所以,value=“嗨,我叫鲍勃”/> 将返回:hi我的名字是bob 或者伤害“lol…”的value=“哎哟!”/> 将返回:哎哟!“那很痛”哈哈… 我知道value=“TEXT\u HERE”/>将始终出现,我希望字符串在其中。是的,在结尾的/>前面总是有一个空格。这是我正在解析的HTML代码,除了这个字段,我已经得到了所有要正确解析的内容 编辑让我澄清一下。我不能真正使用任何辅助工具,因为我正在使用Webdriver解析页面,在获得源代码后,

如何在value=之后的两个引号之间获得一个值

所以,
value=“嗨,我叫鲍勃”/>

将返回:
hi我的名字是bob

或者伤害“lol…”的
value=“哎哟!”/>

将返回:
哎哟!“那很痛”哈哈…

我知道
value=“TEXT\u HERE”/>
将始终出现,我希望字符串在其中。是的,在结尾的
/>
前面总是有一个空格。这是我正在解析的HTML代码,除了这个字段,我已经得到了所有要正确解析的内容

编辑让我澄清一下。我不能真正使用任何辅助工具,因为我正在使用Webdriver解析页面,在获得源代码后,我将HTML放入字符串,然后尝试解析所有数据的“value”标记。

因此,正则表达式代码必须能够通过各种编码进行操作,并获得任何值字段。我需要每个值字段的数据。

您可以使用
String.indexOf()
搜索
的第一个匹配项。保存第一个匹配项索引,使用
String.lastIndexOf()
获取最后一个匹配项索引,并调用String.substring()获取所需的子字符串。

可以使用正则表达式获取引号之间的值,也可以使用包含整个语句/句子/值的字符串

例如,您可以使用String.replaceAll方法将所有的“”(引号)替换为“”(空格)。

通常:

echo 'value="hi my name is bob" />' | perl -nle 'm{value="\s*([^"]*)} and print $1'

如果您使用Java解析HTML,我建议您使用Java库来简化工作。

以下是一些适用于您的Java代码和正则表达式模式:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

Pattern pattern = Pattern.compile("[\\d\\w\\s'\"]+\\z");
Matcher matcher = pattern.matcher("value=\"hi my name is bob\"");

while (matcher.find()) {
    System.out.print("found:'"+matcher.group()+"'");
}
印刷品

找到:“‘嗨,我叫鲍勃’”


您需要使用\.

对字符串中的引号进行转义。我建议使用
XPath
来完成它的设计任务。下面是一个例子,可以帮助您走上正轨:


import java.io.ByteArrayInputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;

public class Test {
  public static void main(String[] args) throws Exception {
    String s = ""
      + "<?xml version=\"1.0\"?>"
      + "<root>"
      + "  <a value=\"hello\" />"
      + "  <b value=\'hello\' />"
      + "  <c value=\"hello &quot;bob&quot;\" />"
      + "</root>";
    ByteArrayInputStream bis = new ByteArrayInputStream(s.getBytes());

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document d = builder.parse(bis);
    XPathFactory xpf = XPathFactory.newInstance();
    XPath xpath = xpf.newXPath();
    XPathExpression xpe = xpath.compile("//@value");
    NodeList nl = (NodeList)xpe.evaluate(d, XPathConstants.NODESET);

    for (int i = 0; i < nl.getLength(); i++) {
      System.out.println(nl.item(i).getNodeValue());
    }
  }
}

你不是在试图通过任何机会,是吗?如果你输出到html,尝试“但这不是关于Java如果你正在使用的是有效的html,
value=“哎哟!伤害“lol…”/>
的应该是
value=“哎哟!“这伤害了”lol…“/>
(内部引号应该转义)。@Briguy37我不认为这是在HTML中转义的方法,我们需要一些“the pony Come”标记来回答有关XML或HTML正则表达式“解析”的问题。但是HTML也允许属性用单引号括起来。不会传递第二个(无效输入?)测试用例。@G_H>这是一个Java问题。是的,但我第一次看到它时并没有这样标记。如果是这样,我就错过了。它也失败了第二个(无效输入?)测试用例;-)当你打算用正则表达式解析HTML时,再多的Perl也救不了你。没有什么能救你了…@pst:Ouch!我错过了那个[没有双关语]:-(@G-U U H:是的,我开始走下坡路。对于HTML来说,Perl有HTML的解析模块,当然……当然……当然……感谢提醒的提醒。感谢提醒的提醒。感谢提醒。h7844444999 9.G的G-U H:是的,我开始走下坡。对于HTML来说,对于HTML Perl有HTML的HTML的Perl有HTML的解析模块,当然……当然……感谢提醒的提醒。感谢提醒的提醒。H h7878444444444447777777777777))全全日日日日基基基基基基基基基基自自自自自自自自自自自自自自自自自自自上上上的8月月8日日日日日日日日日(8)基基基基基自自自自自自自自自自7 7 7 7 7 7日日日日日日日据据据据据据据据据据据据据据据据在本月8日日日日日日日日日日日方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方͍rͬeͬeͬͬ8月3日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日,,,8月5日日日日日日日日日日日日日日日日日日日日日方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方第四条(第四条)第四条(第四条)

hello
hello
hello "bob"