Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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中选择HTML正文中具有特定字符的句子_Java_Regex_Html Parsing_Text Processing - Fatal编程技术网

使用正则表达式在java中选择HTML正文中具有特定字符的句子

使用正则表达式在java中选择HTML正文中具有特定字符的句子,java,regex,html-parsing,text-processing,Java,Regex,Html Parsing,Text Processing,我有一个html页面。我只想在句子/文本末尾有问号的标记中提取文本。我使用: <.+?>(.+?)<.+?> (.+?) 获取标签中的文本。但这有两个问题:1-所有嵌套的标记也被提取,我不想要。(我只想要纯文本)2-我只想得到那些标记中的文本,这些标记的末尾有一个问号 我不知道怎么做。有人能帮我一下吗。 PS:我拥有的html页面格式不正确,因此,使用诸如JSoup之类的工具不是一种选择。这就是我仅使用正则表达式的原因。如果有无限嵌套,则检测嵌套和不匹配很困难或不可能

我有一个html页面。我只想在句子/文本末尾有问号的标记中提取文本。我使用:

<.+?>(.+?)<.+?>
(.+?)
获取标签中的文本。但这有两个问题:1-所有嵌套的标记也被提取,我不想要。(我只想要纯文本)2-我只想得到那些标记中的文本,这些标记的末尾有一个问号

我不知道怎么做。有人能帮我一下吗。
PS:我拥有的html页面格式不正确,因此,使用诸如JSoup之类的工具不是一种选择。这就是我仅使用正则表达式的原因。

如果有无限嵌套,则检测嵌套和不匹配很困难或不可能,但您可以尝试以下方法:

<(.+?)>(.+?\?)</$1>
(.+?\?)
它匹配再次关闭的标记,并且仅在结尾处带有问号


请参见

是否有充分的理由使用正则表达式

您可以自己分析html代码。也许它更快。。。如果

final LinkedList chunks=new LinkedList();
最终字符串text=“italictextanchor word”;
字符串rest=文本;
int pos;
而((pos=rest.indexOf(“?>”)!=-1)
{
final int-endTag=rest.indexOf(“”,endTag+1)+1);
}
System.out.println(块);

请阅读此答案:并使用HTML解析器,而不是regexps。HTML解析器通常应该对格式错误的文档有很强的抵抗力,所以试试吧。你们能举个格式错误的例子吗?如果您真的无法更正输入,那么简单的、基于非正则表达式的方法将是每次迭代输入字符,当您看到>时,开始缓冲纯文本,直到看到
    final LinkedList<String> chunks = new LinkedList<String>();

    final String text = "<i>italic</i><mytag?>text</mytag?><href>anchor</href> <mySecondTag?>word</mySecondTag?>";

    String rest = text;
    int pos;
    while ( (pos = rest.indexOf("?>") )!=-1)
    {
        final int endTag = rest.indexOf("<", pos);
        chunks.add(rest.substring(pos+2, endTag));
        rest = rest.substring(rest.indexOf(">", endTag+1)+1);
    }


    System.out.println(chunks);