Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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_String - Fatal编程技术网

删除除与正则表达式java匹配的文本以外的所有文本

删除除与正则表达式java匹配的文本以外的所有文本,java,regex,string,Java,Regex,String,我有regexp,它应该删除注释(是的,这很糟糕,但对我来说它是有效的) 此代码应删除所有逗号 Pattern.compile(regex).matcher(some text).replaceAll(" "); 但是我怎样才能删除除regexp之外的所有内容呢 例如: 如果我有这样的字符串: /*评论很酷*/ 公共静态void foo(){} 我的regexp匹配注释,但我需要删除不匹配的内容,因此它看起来像: /*Comments it's cool*/ 基本上,您可以只匹配正则表达式匹

我有regexp,它应该删除注释(是的,这很糟糕,但对我来说它是有效的)

此代码应删除所有逗号

Pattern.compile(regex).matcher(some text).replaceAll(" ");
但是我怎样才能删除除regexp之外的所有内容呢

例如: 如果我有这样的字符串:

/*评论很酷*/
公共静态void foo(){}

我的regexp匹配注释,但我需要删除不匹配的内容,因此它看起来像:

/*Comments it's cool*/

基本上,您可以只匹配正则表达式匹配的内容,并连接匹配的文本。这要容易得多

至于ReXEX,它可以移除所有与原始模式匹配的所有内容,可以考虑通过捕获可选组捕获整个模式,并使用<代码> .<代码>来匹配其后的任何字符。

比如说,你的模式是abc。它与abc相配。但是现在,你需要匹配相反的东西,所有你的正则表达式不匹配的东西。使用

(?s)(abc)?.
并替换为
$1
。看

不过,对于换行符,可能需要进行一些调整。如果不想删除换行符,请不要使用“点全部”修改器。如果要使用它,请将原始模式中的
替换为
[^\n\r]
。请记住,您将能够使用一些
(\r?\n |\r){2,}
模式(以及
$1
反向引用)收缩空行

那么,你的正则表达式是

String regex = "^\\s*//.*|/\*[^*]*\*+(?:[^/*][^*]*\*+)*/";
其中,
/\*[^*]*\*+(?:[^/*][^*]*\*+)*/
匹配多行注释,
^\\s*/.
匹配单行注释

要使其删除所有匹配项,请使用

String regex = "(?sm)(^\\s*//[^\r\n]*|/\\*[^*]*\\*+(?:[^/*][^*]*\\*+)*/)?.";

并替换为
$1
反向参考。请参阅(基于)。注:我还为
^
添加了一个
(?m)
多行修饰符,以便在行首匹配。

基本上,您可以只匹配正则表达式匹配的内容,并连接匹配的文本。这要容易得多

至于ReXEX,它可以移除所有与原始模式匹配的所有内容,可以考虑通过捕获可选组捕获整个模式,并使用<代码> .<代码>来匹配其后的任何字符。

比如说,你的模式是abc。它与abc相配。但是现在,你需要匹配相反的东西,所有你的正则表达式不匹配的东西。使用

(?s)(abc)?.
并替换为
$1
。看

不过,对于换行符,可能需要进行一些调整。如果不想删除换行符,请不要使用“点全部”修改器。如果要使用它,请将原始模式中的
替换为
[^\n\r]
。请记住,您将能够使用一些
(\r?\n |\r){2,}
模式(以及
$1
反向引用)收缩空行

那么,你的正则表达式是

String regex = "^\\s*//.*|/\*[^*]*\*+(?:[^/*][^*]*\*+)*/";
其中,
/\*[^*]*\*+(?:[^/*][^*]*\*+)*/
匹配多行注释,
^\\s*/.
匹配单行注释

要使其删除所有匹配项,请使用

String regex = "(?sm)(^\\s*//[^\r\n]*|/\\*[^*]*\\*+(?:[^/*][^*]*\\*+)*/)?.";

并替换为
$1
反向参考。请参阅(基于)。注:我还为
^
添加了一个
(?m)
多行修饰符,以便在行首进行匹配。

只需连接所有匹配项?哦,来吧-匹配正则表达式并将其附加到结果字符串/缓冲区/等等。顺便问一句,您真的很高兴使用
(.|\n)+?
?至少使用
*?
(使用
(?s)
内联修饰符)。但是,对于多行注释有更好的正则表达式。而
(^\/\/.*)|(\s+\/\/.*)
(\s*\/\/.*)
.B.t.w相同。您可能想签出我的查询/答案:。只需连接所有匹配项?哦,来吧-匹配正则表达式并将它们附加到结果字符串/缓冲区/等等。顺便说一句,您真的很高兴使用
(.|\n)+?
?至少使用
*?
(使用
(?s)
内联修饰符)。但是,对于多行注释有更好的正则表达式。而
(^\/\/.*)|(\s+\/\/.*)
(\s*\/\/.*)
.B.t.w相同。您可能想签出我的查询/答案:。