将 C# 正则表达式转换为 Java 匹配器问题
Converting C# Regular Expression To Java matcher issue
public static String ReturnBetween(String heap, String startEx, String endEx, boolean include) {
int startPos = 0;
int endPos = heap.length();
String starts = "";
String ends = "";
if (!startEx.equals("^")) {
Pattern regexStart = Pattern.compile(startEx, Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
starts = regexStart.matcher(heap).toString();
if (starts.equals("")) {
startPos = -1;
} else {
startPos = heap.indexOf(starts);
}
}
if (startPos == -1) {
return "";
}
if (!endEx.equals("$")) {
Pattern regexEnd = Pattern.compile(endEx, Pattern.CASE_INSENSITIVE | Pattern.DOTALL );
ends = regexEnd.Match(heap, startPos + starts.length()).toString();
if (ends.equals("")) {
endPos = -1;
} else {
endPos = heap.indexOf(ends, startPos + starts.length());
}
}
if (endPos == -1) {
return "";
}
if (!include) {
startPos += starts.length();
}
if (include) {
endPos += ends.length();
}
String result = heap.substring(startPos, endPos);
return result;
}
这是一个 c# 函数,用于获取两个变量之间的字符串,我正在尝试将其转换为 java 函数,大部分已经转换为 java 代码。
我已经设法转换了这个功能。除了这部分:
ends = regexEnd.Match(heap, startPos + starts.length()).toString();
你应该替换
ends = regexEnd.Match(heap, startPos + starts.length()).toString();
和
Matcher m = regexEnd.matcher(heap);
if (m.find(startPos + starts.length())) {
ends = m.group();
}
关键是您需要声明一个匹配器并使用来自您已有的 Pattern
(regexEnd
) 的输入字符串 (heap
) 对其进行实例化。
然后,您使用 .find(index)
执行匹配器,其中 index
是要搜索的起始位置。如果有匹配项,m.group()
包含匹配值。
public static String ReturnBetween(String heap, String startEx, String endEx, boolean include) {
int startPos = 0;
int endPos = heap.length();
String starts = "";
String ends = "";
if (!startEx.equals("^")) {
Pattern regexStart = Pattern.compile(startEx, Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
starts = regexStart.matcher(heap).toString();
if (starts.equals("")) {
startPos = -1;
} else {
startPos = heap.indexOf(starts);
}
}
if (startPos == -1) {
return "";
}
if (!endEx.equals("$")) {
Pattern regexEnd = Pattern.compile(endEx, Pattern.CASE_INSENSITIVE | Pattern.DOTALL );
ends = regexEnd.Match(heap, startPos + starts.length()).toString();
if (ends.equals("")) {
endPos = -1;
} else {
endPos = heap.indexOf(ends, startPos + starts.length());
}
}
if (endPos == -1) {
return "";
}
if (!include) {
startPos += starts.length();
}
if (include) {
endPos += ends.length();
}
String result = heap.substring(startPos, endPos);
return result;
}
这是一个 c# 函数,用于获取两个变量之间的字符串,我正在尝试将其转换为 java 函数,大部分已经转换为 java 代码。 我已经设法转换了这个功能。除了这部分:
ends = regexEnd.Match(heap, startPos + starts.length()).toString();
你应该替换
ends = regexEnd.Match(heap, startPos + starts.length()).toString();
和
Matcher m = regexEnd.matcher(heap);
if (m.find(startPos + starts.length())) {
ends = m.group();
}
关键是您需要声明一个匹配器并使用来自您已有的 Pattern
(regexEnd
) 的输入字符串 (heap
) 对其进行实例化。
然后,您使用 .find(index)
执行匹配器,其中 index
是要搜索的起始位置。如果有匹配项,m.group()
包含匹配值。