Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.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
Java 请帮助我获取此返回值_Java_Html_Regex - Fatal编程技术网

Java 请帮助我获取此返回值

Java 请帮助我获取此返回值,java,html,regex,Java,Html,Regex,我知道使用正则表达式不是在Java中搜索HTML标记的最佳方法。但这是我正在进行的项目的第一步,我还必须搜索非HTML内容。那么为什么下面的代码不起作用呢 public static String tagValue(String inHTML, String tag) throws DataNotFoundException { String value = null; String searchFor = "/<" + tag + ">(.*?)<\\/"

我知道使用正则表达式不是在Java中搜索HTML标记的最佳方法。但这是我正在进行的项目的第一步,我还必须搜索非HTML内容。那么为什么下面的代码不起作用呢

public static String tagValue(String inHTML, String tag) throws DataNotFoundException
{
    String value = null;

    String searchFor = "/<" + tag + ">(.*?)<\\/" + tag + "\\>/";

    Pattern pattern = Pattern.compile(searchFor);
    Matcher matcher = pattern.matcher(inHTML);

    return matcher.toString();

}
publicstaticstringtagvalue(stringinhtml,stringtag)抛出DataNotFoundException
{
字符串值=null;
字符串searchFor=“/(.*?/”;
Pattern=Pattern.compile(searchFor);
Matcher-Matcher=pattern.Matcher(inHTML);
返回matcher.toString();
}

我建议您首先在fex样本上尝试正则表达式,例如使用

一旦找到一个好的regexp,就可以在代码中引入它

例如,以下正则表达式(已测试)

正则表达式
原始表达式]*)>(*))
作为Java字符串“]*)>(.*)”
提供以下测试结果:

Target String           group(0)                    group(1)    group(2)        group(3)
<b>text</b>                 <b>text</b>                 b           text
<a href="pouet">link</a>    <a href="pouet">link</a>    a           href="pouet"    link
<footnote></footnote>       <footnote></footnote>       footnote
目标字符串组(0)组(1)组(2)组(3)
文本文本b文本
a href=“pouet”链接
脚注

这似乎很好,不是吗?

我建议您首先在fex样本上尝试正则表达式,例如使用

一旦找到一个好的regexp,就可以在代码中引入它

例如,以下正则表达式(已测试)

正则表达式
原始表达式]*)>(*))
作为Java字符串“]*)>(.*)”
提供以下测试结果:

Target String           group(0)                    group(1)    group(2)        group(3)
<b>text</b>                 <b>text</b>                 b           text
<a href="pouet">link</a>    <a href="pouet">link</a>    a           href="pouet"    link
<footnote></footnote>       <footnote></footnote>       footnote
目标字符串组(0)组(1)组(2)组(3)
文本文本b文本
a href=“pouet”链接
脚注
这似乎很好,不是吗?

matcher.toString()不会搜索。使用
matcher.find()
matcher.matches()

下面是如何使用
模式
匹配器
的官方示例

匹配器。toString()
不进行搜索。使用
matcher.find()
matcher.matches()

下面是如何使用
模式
匹配器
的官方示例


如果你在进行这种简单的搜索,却无法找出自己的正则表达式,那么你就违反了KISS原则。请尝试以下方法:

public static String tagValue(String inHTML, String tag) throws DataNotFoundException {
    int start = inHTML.first("<"+tag+">");
    if(start < 0) throw DataNotFoundException("Couldn't find beginning "+tag+" tag.");
    int end = inHtml.first("</"+tag+">", start);
    if(end < 0) throw DataNotFoundException("Couldn't find ending "+tag+" tag.");
    return intHTML.substring(start,end);
}
publicstaticstringtagvalue(stringinhtml,stringtag)抛出DataNotFoundException{
int start=inHTML.first(“”);
如果(开始<0)抛出DataNotFoundException(“找不到开始“+标记+”标记”);
int end=inHtml.first(“,start”);
如果(end<0)抛出DataNotFoundException(“找不到结尾”+tag+“tag”);
返回intHTML.substring(开始、结束);
}

注意:我还没有运行这个,所以可能存在打字错误。请随意更正它们(并删除此注释)。

如果您正在进行这种简单的搜索,但无法找出自己的正则表达式,那么您违反了KISS原则。请尝试以下方法:

public static String tagValue(String inHTML, String tag) throws DataNotFoundException {
    int start = inHTML.first("<"+tag+">");
    if(start < 0) throw DataNotFoundException("Couldn't find beginning "+tag+" tag.");
    int end = inHtml.first("</"+tag+">", start);
    if(end < 0) throw DataNotFoundException("Couldn't find ending "+tag+" tag.");
    return intHTML.substring(start,end);
}
publicstaticstringtagvalue(stringinhtml,stringtag)抛出DataNotFoundException{
int start=inHTML.first(“”);
如果(开始<0)抛出DataNotFoundException(“找不到开始“+标记+”标记”);
int end=inHtml.first(“,start”);
如果(end<0)抛出DataNotFoundException(“找不到结尾”+tag+“tag”);
返回intHTML.substring(开始、结束);
}

注意:我还没有运行这个,所以可能存在打字错误。请随意更正(并删除此注释)。

您似乎在使用一个来自PHP背景的正则表达式-如果您想让正则表达式在Java中工作,需要删除它周围的分隔符(斜杠):

String searchFor = "<" + tag + ">(.*?)</" + tag + ">";
String searchFor=“(.*)”;

否则,您的正则表达式将在您的标记周围寻找可能不存在的文本斜杠。

您似乎在使用一个来自PHP背景的正则表达式-如果您想让正则表达式在Java中工作,需要删除它周围的分隔符(斜杠):

String searchFor = "<" + tag + ">(.*?)</" + tag + ">";
String searchFor=“(.*)”;

否则,您的正则表达式将在您的标记周围寻找可能不存在的文字斜杠。

您是否可以添加一些关于“如何”不起作用的详细信息?任何堆栈跟踪,或者只是没有结果,或者其他什么?您可以使用XQuery或XPath将文本节点(我想,这就是您所说的“非HTML内容”)与模式匹配。XQuery 1.0和XPath 2.0都支持正则表达式。也不需要将HTML与正则表达式匹配。您是否可以添加一些关于“如何”不工作的详细信息?任何堆栈跟踪,或者只是没有结果,或者其他什么?您可以使用XQuery或XPath将文本节点(我想,这就是您所说的“非HTML内容”)与模式匹配。XQuery 1.0和XPath 2.0都支持正则表达式。也不需要将HTML与正则表达式匹配。我不认为他们的模式会在像
      ..
这样的文本上做他们希望它做的事情,因为它是第一个
,然后是第一个
,而不是对应的一个。在Java过于简单的正则表达式语言中,您无法正确地执行递归模式,但您可以排除括号。我认为他们的模式不会在像
        这样的文本上执行他们希望它执行的操作。
,因为它是第一个
,然后是第一个
,而不是对应的一个。在Java过于简单的正则表达式语言中,不能正确地执行递归模式,但可以排除括号。