斜体降价的正则表达式
Regex for italic markdown
我正在尝试使用正则表达式几个小时:我需要一个正则表达式来 select 所有下划线内的内容。
示例:
\_italic\_
但唯一的条件是我需要它忽略 \_
(反斜杠后跟下划线)。
所以,这将是一个匹配项(\_
内的所有文本):
\_italic some text 123 \_*%&$ _
到目前为止我有这个正则表达式:
(\_.*?\_)(?!\\_)
但不忽略 \_
哪个正则表达式可以工作?
您可以使用
(?s)(?<!\)(?:\{2})*_((?:[^\_]|\.)+)_
见regex demo。 详情:
(?s)
- 内联嵌入标志选项等于 Pattern.DOTALL
(?<!\)(?:\{2})*
- 前面没有紧跟反斜杠的位置,然后是零个或多个双反斜杠序列
_
- 下划线
((?:[^\_]|\.)+)
- 捕获第 1 组:除 \
和 _
以外的任何字符出现一次或多次,或任何转义字符([=18= 的组合) ] 和任意一个字符)
_
- 下划线
参见 Java demo:
List<String> strs = Arrays.asList("xxx _italic some text 123 \_*%&$ _ xxx",
"\_test_test_");
String regex = "(?s)(?<!\\)(?:\\{2})*_((?:[^\\_]|\\.)+)_";
Pattern p = Pattern.compile(regex);
for (String str : strs) {
Matcher m = p.matcher(str);
List<String> result = new ArrayList<>();
while(m.find()) {
result.add(m.group(1));
}
System.out.println(str + " => " + String.join(", ", result));
}
输出:
xxx _italic some text 123 \_*%&$ _ xxx => italic some text 123 \_*%&$
\_test_test_ => test
我正在尝试使用正则表达式几个小时:我需要一个正则表达式来 select 所有下划线内的内容。 示例:
\_italic\_
但唯一的条件是我需要它忽略 \_
(反斜杠后跟下划线)。
所以,这将是一个匹配项(\_
内的所有文本):
\_italic some text 123 \_*%&$ _
到目前为止我有这个正则表达式:
(\_.*?\_)(?!\\_)
但不忽略 \_
哪个正则表达式可以工作?
您可以使用
(?s)(?<!\)(?:\{2})*_((?:[^\_]|\.)+)_
见regex demo。 详情:
(?s)
- 内联嵌入标志选项等于Pattern.DOTALL
(?<!\)(?:\{2})*
- 前面没有紧跟反斜杠的位置,然后是零个或多个双反斜杠序列_
- 下划线((?:[^\_]|\.)+)
- 捕获第 1 组:除\
和_
以外的任何字符出现一次或多次,或任何转义字符([=18= 的组合) ] 和任意一个字符)_
- 下划线
参见 Java demo:
List<String> strs = Arrays.asList("xxx _italic some text 123 \_*%&$ _ xxx",
"\_test_test_");
String regex = "(?s)(?<!\\)(?:\\{2})*_((?:[^\\_]|\\.)+)_";
Pattern p = Pattern.compile(regex);
for (String str : strs) {
Matcher m = p.matcher(str);
List<String> result = new ArrayList<>();
while(m.find()) {
result.add(m.group(1));
}
System.out.println(str + " => " + String.join(", ", result));
}
输出:
xxx _italic some text 123 \_*%&$ _ xxx => italic some text 123 \_*%&$
\_test_test_ => test