我在正则表达式中很穷。我用Google搜索并基本了解它。
我有以下要求: 我的命令可能包含一些字符串" $(VAR_NAME)"图案。我需要弄清楚它是否有这种类型的字符串。如果是这样,我必须解决这些问题(我知道如果有这样的字符串我应该怎么做)。 但问题是,如何查找命令是否包含" $(VAR_NAME)"图案。在我的命令中可能有多个或零个这样的字符串模式。
据我所知,我写了下面的代码。如果我在下面的代码中使用 'pattern1'
,则它是匹配的。但是,不是'pattern'
有人可以帮忙吗?
提前谢谢。
final String command = "somescript.file $(ABC_PATH1) $(ENV_PATH2) <may be other args too here>";
final String pattern = "\\Q$(\\w+)\\E";
//final String pattern1 = "\\Q$(ABC_PATH1)\\E";
final Pattern pr = Pattern.compile(pattern);
final Matcher match = pr.matcher(command);
if (match.find())
{
System.out.println("Found value: " + match.group(0));
}
else
{
System.out.println("NO MATCH");
}
答案 0 :(得分:1)
您可以使用#include <stdio.h>
#include <stdlib.h>
void main()
{
system("color 1F");
}
方法添加Pattern以传递编译方法。
Pattern.quote("Q$(w+)E")
答案 1 :(得分:1)
我认为你过分复杂了这个问题
由于$(
是一个保留的“单词”,只需执行此操作以检查是否存在:
command.indexOf("$(");
用法示例:
public class Test
{
private static final String[] WORDS;
static {
WORDS = new String[] {
"WORD1",
"WORD2"
};
}
public static void main(final String[] args) {
String command = "somescript.file $(ABC_PATH1) $(ENV_PATH2)";
int index = 0;
int i = 0;
while (true) {
index = command.indexOf("$(", index);
if (index < 0) {
break;
}
command = command.replace(command.substring(index, command.indexOf(")", index) + 1), WORDS[i++]);
}
}
}
打印:somescript.file WORD1 WORD2
坚持原始资料来源:
public class Test
{
public static void main(final String[] args) {
final String command = "somescript.file $(ABC_PATH1) $(ENV_PATH2)";
int index = 0;
int occurrences = 0;
while (true) {
index = command.indexOf("$(", index);
if (index < 0) {
break;
}
occurrences++;
System.out.println(command.substring(index, command.indexOf(")", index++) + 1));
}
if (occurrences < 1) {
System.out.println("No placeholders found");
}
}
}
答案 2 :(得分:1)
使用\ Q和\ E意味着您无法为变量名称设置捕获组,因为圆括号将按字面解释。
我可能会这样做,只是逃避外部$,(和)。
此外,如果你需要多次匹配,你需要多次调用find(),我已经使用了while循环。
final String command = "somescript.file $(ABC_PATH1) $(ENV_PATH2) <may be other args too here>";
final String pattern = "\\$\\((\\w+)\\)";
final Pattern pr = Pattern.compile(pattern);
final Matcher match = pr.matcher(command);
while (match.find()) {
System.out.println("Found value: " + match.group(1));
}
输出
Found value: ABC_PATH1
Found value: ENV_PATH2
答案 3 :(得分:1)
模式可能如下:
public static void main(String[] args) {
final String command = "somescript.file $(ABC_PATH1) $(ENV_PATH2) <may be other args too here>";
final String pattern = "\\$\\((.*?)\\)";
// final String pattern1 = "\\Q$(ABC_PATH1)\\E";
final Pattern pr = Pattern.compile(pattern);
final Matcher match = pr.matcher(command);
while (match.find()) {
System.out.println("Found value: " + match.group(1));
}
}
打印:
Found value: ABC_PATH1
Found value: ENV_PATH2
答案 4 :(得分:1)
问题在于引用也适用于模式中的\ w +,我认为这不是意图(因为它匹配字符串&#34; cmd $(\ w +)&#34;包括反斜杠,&#39; w&#39;和加号。
模式可以替换为:
final String pattern = "\\$\\(\\w+\\)";
或者,如果你仍然想在第一部分使用\ Q和\ E:
final String pattern = "\\Q$(\\E\\w+\\)";