如何在另一个特定字符之后匹配特定字符
How to match specific character after another specific character
我需要在另一个特定字符之后查找特定字符。例如
jhony@domain.com
我需要找到第一次出现的“.”。直到单词 的 end 在 第一次出现“@”
之后
我试过这个模式,但没有成功:
(?<=@)([.])$
我认为没有必要回顾。
我很少使用它们,因为我发现它们很难理解。有时你不得不使用它们,但你可以尝试以下方法:
@.*?(\..*)$
- 首先匹配文字
@
- 那就什么都拿,但不要贪心:
.*?
- 用方括号开始第一个捕获组
(...)
- 用
\.
匹配文字点
- 然后就是剩下的
.*
重要提示: 不贪心使用 .*?
允许您在 第一次 出现文字时开始捕获组点。如果您使用 .*
(贪婪),则无法捕获 .co.uk
之类的域,您只能捕获 .uk
.
对于以下测试数据:
jhony@domain.com
john.doe@company.co.uk
您将在第一个捕获组中获得 .com
和 .co.uk
。
Regex101 示例:https://regex101.com/r/8iYCJ9/1
您当前的问题可能可以通过不同的方式解决,但这是您所要求的:
(?<=@\w{0,255})\.
看到主机部分的最大长度是 said to be 255 个字符,{0,255}
似乎能够匹配 @
和 .
之间尽可能多的字符必要的。
见regex demo。 详情:
(?<=@\w{0,255})
- 正 constrained-width 后视,匹配紧接在 @
之前的位置,然后是 0 到 255 个字符
\.
- 一个点。
替代正则表达式:
"(?<=@\w{1,100})(\.\S+)"
上下文和测试平台中的正则表达式:
public static void main(String[] args) {
String input = "jhony@domain.com";
Pattern pattern = Pattern.compile("(?<=@\w{1,100})(\.\S+)");
Matcher matcher = pattern.matcher(input);
if(matcher.find()) {
System.out.println(matcher.group(1));
}
}
不带“组号”的匹配:
public static void main(String[] args) {
String input = "jhony@domain.com";
Pattern pattern = Pattern.compile("(?<=@\w{1,100})\.\S+");
Matcher matcher = pattern.matcher(input);
if(matcher.find()) {
System.out.println(matcher.group());
}
}
输出:
.com
有关 Pattern 'Special constructs' 的更多信息,请参见此处:
https://docs.oracle.com/javase/10/docs/api/java/util/regex/Pattern.html
我需要在另一个特定字符之后查找特定字符。例如
jhony@domain.com
我需要找到第一次出现的“.”。直到单词 的 end 在 第一次出现“@”
之后我试过这个模式,但没有成功:
(?<=@)([.])$
我认为没有必要回顾。 我很少使用它们,因为我发现它们很难理解。有时你不得不使用它们,但你可以尝试以下方法:
@.*?(\..*)$
- 首先匹配文字
@
- 那就什么都拿,但不要贪心:
.*?
- 用方括号开始第一个捕获组
(...)
- 用
\.
匹配文字点
- 然后就是剩下的
.*
重要提示: 不贪心使用 .*?
允许您在 第一次 出现文字时开始捕获组点。如果您使用 .*
(贪婪),则无法捕获 .co.uk
之类的域,您只能捕获 .uk
.
对于以下测试数据:
jhony@domain.com
john.doe@company.co.uk
您将在第一个捕获组中获得 .com
和 .co.uk
。
Regex101 示例:https://regex101.com/r/8iYCJ9/1
您当前的问题可能可以通过不同的方式解决,但这是您所要求的:
(?<=@\w{0,255})\.
看到主机部分的最大长度是 said to be 255 个字符,{0,255}
似乎能够匹配 @
和 .
之间尽可能多的字符必要的。
见regex demo。 详情:
(?<=@\w{0,255})
- 正 constrained-width 后视,匹配紧接在@
之前的位置,然后是 0 到 255 个字符\.
- 一个点。
替代正则表达式:
"(?<=@\w{1,100})(\.\S+)"
上下文和测试平台中的正则表达式:
public static void main(String[] args) {
String input = "jhony@domain.com";
Pattern pattern = Pattern.compile("(?<=@\w{1,100})(\.\S+)");
Matcher matcher = pattern.matcher(input);
if(matcher.find()) {
System.out.println(matcher.group(1));
}
}
不带“组号”的匹配:
public static void main(String[] args) {
String input = "jhony@domain.com";
Pattern pattern = Pattern.compile("(?<=@\w{1,100})\.\S+");
Matcher matcher = pattern.matcher(input);
if(matcher.find()) {
System.out.println(matcher.group());
}
}
输出:
.com
有关 Pattern 'Special constructs' 的更多信息,请参见此处: https://docs.oracle.com/javase/10/docs/api/java/util/regex/Pattern.html