Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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_Regex - Fatal编程技术网

Java 用于获取多行字符串中两个标记之间的内容的正则表达式

Java 用于获取多行字符串中两个标记之间的内容的正则表达式,java,regex,Java,Regex,我试图在Java中使用正则表达式从两个标记之间的多行字符串中提取内容。例如,内容可能如下所示: --_000_CAKETFEgg78oKKJPNySnxF4BgQoh9ifHP4XzXGeJddUvOtz5wmailgm_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable hello test ... .. !@#!@%$#^%$&*^(*)*() .

我试图在Java中使用正则表达式从两个标记之间的多行字符串中提取内容。例如,内容可能如下所示:

--_000_CAKETFEgg78oKKJPNySnxF4BgQoh9ifHP4XzXGeJddUvOtz5wmailgm_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

hello test

...

..
!@#!@%$#^%$&*^(*)*()
..
..
..



..


--_000_CAKETFEgg78oKKJPNySnxF4BgQoh9ifHP4XzXGeJddUvOtz5wmailgm_
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

hello test<br><br>..<br>!@#!@%$#^%$&*^(*)*()<br>.<br><br>.<br>.<br>.<br><br><br><br>.<br><br>

--_000_CAKETFEgg78oKKJPNySnxF4BgQoh9ifHP4XzXGeJddUvOtz5wmailgm_
————————————————————————————————————————————————————————————————————————————————————_
内容类型:文本/纯文本;charset=“iso-8859-1”
内容传输编码:引用可打印
你好测试
...
..
!@#!@%$#^%$&*^(*)*()
..
..
..
..
--_000_CAKETFEgg78oKKJPNySnxF4BgQoh9ifHP4XzXGeJddUvOtz5wmailgm_
内容类型:text/html;charset=“iso-8859-1”
内容传输编码:引用可打印
您好,测试


!@#!@%$#^%$&*^(*)*()















--_000_CAKETFEgg78oKKJPNySnxF4BgQoh9ifHP4XzXGeJddUvOtz5wmailgm_
我只想提取
-\u 000\u CAKETFEgg78oKKJPNySnxF4BgQoh9ifHP4XzXGeJddUvOtz5wmailgm\u
边界之间的内容

我使用了一个如下所示的正则表达式:
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————


但它不起作用。我的正则表达式应该是什么来提取内容?此外,在提取时,边界标记会与内容一起包含吗?

我强烈建议不要使用正则表达式进行解析。他们不太适合这样做。只需编写一个解析器,对输入进行迭代,搜索开始标记,设置标志,记录下面的所有行,识别结束标记并重置标志。操作简单,比正则表达式灵活得多。

如果文件没有那么大,比如说,您可以将其读入内存一次。你可以用正则表达式提取东西

(?<=--_000_CAKETFEgg78oKKJPNySnxF4BgQoh9ifHP4XzXGeJddUvOtz5wmailgm_).*(?=--_000_CAKETFEgg78oKKJPNySnxF4BgQoh9ifHP4XzXGeJddUvOtz5wmailgm_)
然而,如果文件是一个巨大的文件,您将遇到问题,即使您可以将其读入内存,使用regex进行处理也不会很快


在这种情况下,逐行或以流的形式读取文件将是解决问题的一般方法。您可以通过阅读来搜索和提取内容。实现起来并不比regex难。

如何处理文本中出现两次以上的标记?获取第一个和最后一个之间的所有信息?是否为每个内容之间的每个内容获取一个组结果?
(?<=--_000_CAKETFEgg78oKKJPNySnxF4BgQoh9ifHP4XzXGeJddUvOtz5wmailgm_).*(?=--_000_CAKETFEgg78oKKJPNySnxF4BgQoh9ifHP4XzXGeJddUvOtz5wmailgm_)