我需要从完全限定的域名String中获取主机名。 应剥离所有父域/子域/接口名称,即
(.*?)(?:.|-)
我尝试了类似的各种组合:
jArray.getJSONObject(0);
但它没有多大帮助。
PS:正则表达式应该是单行代码,因为它在应用程序中作为输入。
答案 0 :(得分:1)
除了Java之外的正则表达式 -
^.*?\\b
您可以在这里\b
或word boundary
。参见演示。
https://regex101.com/r/tD0dU9/3
字边界\b
在这种情况下不起作用,因为Java包括所有unicode字符范围作为字边界条件。
答案 1 :(得分:1)
如果我理解你的要求是正确的,你想在第一个点或连字符之前得到一个字符串的一部分。
在这种情况下,以下正则表达式将起作用:"([^.-]*)[.-]?"
。第一个匹配将是所需的字符串。
测试代码:
public static void main(String[] args) throws Exception {
String[] strs = { "abc001", "efg.fqdn.com", "mnop-int", "help-adm.fqdn" };
Pattern pattern = Pattern.compile("([^.-]*)[.-]?");
for (String str : strs) {
Matcher matcher = pattern.matcher(str);
if (matcher.find()) {
System.out.println(matcher.group(1));
}
}
}
输出:
abc001
efg
mnop
help
答案 2 :(得分:0)
由于Java的\b
边界条件与其他正则表达式引擎略有不同,我们在使用边界条件时需要更加小心。
public class BoundaryCondRegEx {
public static void main(String[] args) {
Pattern p = Pattern.compile("^(?<n>\\w+).*$");
Matcher m = p.matcher("mnop-int");
if(m.matches())
{
System.out.print(m.group("n"));
}
else
System.out.println("Nope");
}
}
所以正如模式"^(?<n>\\w+).*$"
中所提到的,\w
代表[0-9A-Za-z_],如果你的结果子串是由这些字符组成的,你就可以了