0
我想搜索字符串以查找与特定模式匹配的字符串。 然后,我将编写由逗号分隔的唯一发现字符串列表。 该模式是寻找"$FOR_something"
只要该模式不落在"#LOOKING()"
或"/* */"
和_something部分没有任何其他特殊字符。如何识别字符串中的字符串模式,但忽略匹配是否落入已识别模式
举例来说,如果我有这样的字符串,
"Not #LOOKING($FOR_one $FOR_two) /* $FOR_three */ not $$$FOR_four or $FOR_four_b, but $FOR_five; and $FOR_six and not $FOR-seven or $FOR_five again"
中发现的模式我正在寻找从以上引用的字符串会的结果列表:
$FOR_five, $FOR_six
我开始用这个例如:
import java.lang.StringBuffer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class testIt {
public static void main(String args[]) {
String myWords = "Not #LOOKING($FOR_one $FOR_two) /* $FOR_three */ not $$$FOR_four or $FOR_four_b, but $FOR_five; and $FOR_six and not $FOR-seven or $FOR_five again";
StringBuffer sb = new StringBuffer(0);
if (myWords.toUpperCase().contains("$FOR"))
{
Pattern p = Pattern.compile("\\$FOR[\\_][a-zA-Z_0-9]+[\\s]*", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(myWords);
String myFors = "";
while (m.find())
{
myFors = myWords.substring(m.start() , m.end()).trim();
if (sb.length() == 0) sb = sb.append(myFors);
else
{
if (!(sb.toString().contains(myFors))) sb = sb.append(", " + myFors);
}
}
}
System.out.println(sb);
}
}
但它没有给我我想要的。我想要的是:
$FOR_five, $FOR_six
相反,我得到所有的$ FOR_somethings。我不知道如何忽略/**/
或#LOOKING()
中的发生。 有什么建议吗?