周围有类似的例子,但我无法找到我的解决方案
目标:删除/ *和* /之间的所有(包括)数据。我使用下面的代码
String str="this /* asdasda */ is test";
str = str.replaceAll("/\\*.*?\\*/","") ;
System.out.println(str);
输出:
this is test
当这些是嵌套的
时出现问题String str="this /* asdas/* extra comments */da */ is test";
str = str.replaceAll("/\\*.*?\\*/","") ;
System.out.println(str);
输出
this da */ is test
我无法解决嵌套部分。我需要它来丢弃/ *和* /
之间的任何东西例如
"this /* asdas/* extra commen/* asdas */ ts */da */ is test /* asdas */ asdasd ";
应该转换为
this is test asdasd
答案 0 :(得分:2)
将replaceAll
中的正则表达式更改为/\\*.*\\*/
跑步:
String str="this /* asdas/* extra comments */da */ is test";
str = str.replaceAll("/\\*.*\\*/","") ;
System.out.println(str);
输出:
this is test
跑步:
String str="hello /*/* asdas/* eer/* hemmllo*/ */da */ */world";
str = str.replaceAll("/\\*.*\\*/","") ;
System.out.println(str);
输出:
hello world
假设你使用简单的单词,试试这个:
replaceAll("(/\\*( *(\\w) *)*)|(( *(\\w) *)*\\*/)","").replaceAll("\\*/|/\\*","");
测试1:
String str="/* huhu /* jij */ /* */ here /* asfas /* kjk */ kh*/ here to";
str = str.replaceAll("(/\\*( *(\\w) *)*)|(( *(\\w) *)*\\*/)","").replaceAll("\\*/|/\\*","");
System.out.println(str);
输出:
here here to
测试2:
String str1="this /* asdas/* extra commen/* asdas */ ts */da */ is test /* asdas */ asdasd ";
str1 = str1.replaceAll("(/\\*( *(\\w) *)*)|(( *(\\w) *)*\\*/)","").replaceAll("\\*/|/\\*","") ;
System.out.println(str1);
输出:
this is test asdasd
测试3:
String str2="this /* /* i */ is /**/ */ test";
str2 = str2.replaceAll("(/\\*( *(\\w) *)*)|(( *(\\w) *)*\\*/)","").replaceAll("\\*/|/\\*","") ;
System.out.println(str2);
输出:
this is test
答案 1 :(得分:1)
Java不支持递归匹配,因此您无法一次完成任务。对于支持递归正则表达式匹配的语言,您可以尝试类似:
<script src="https://unpkg.com/vue"></script>
<div id="app">
<p>{{ message }}</p>
<input type="date" :value="myDate && myDate.toISOString().split('T')[0]"
@input="myDate = $event.target.valueAsDate">
<p>
<code>
myDate: {{ myDate }}</code>
</p>
<button @click="setMyDateToToday">Set date one to today</button>
<button @click="addADayToMyDate">Add a day to my date</button>
</div>
要在Java中模拟递归匹配,您可以在实际正则表达式之外添加逻辑(执行多次传递)。
取出<t t-if="a in b">
<!-- do something -->
</t>
(\/\*(?>[^\/\*\*\/]+|(?1))*\*\/)
部分,您有
|(?1)
如果你使用这样的模式匹配器:
or
最后一遍将为您提供您正在寻找的字符串
请参阅https://regex101.com/在线试用正则表达式,我发现它很有帮助。