我应该使用哪种表达方式以获得理想的结果?

时间:2019-04-29 14:57:36

标签: regex

对于像DirContextOperations ctx = ldapTemplate.lookupContext(groupDn); ctx.addAttributeValue("member",buildPersonDn(user.getUid())); ldapTemplate.update(ctx); 这样的字符串,我想使用表达式DirContextOperations ctx = ldapTemplate.lookupContext(groupDn); ctx.addAttributeValue("member",buildPersonDn(user.getUid()).toString()); ldapTemplate.modifyAttributes(ctx); 获得结果Cisco 3750 i7706-cm021 10.123.12.34 -> 10.123.34.12。但是,整个字符串都是匹配的。正确的表达是什么?

1 个答案:

答案 0 :(得分:0)

您可以使用正则表达式,例如

^.*?(?=\b(?:\d{1,3}\.){3}\d{1,3}$)

请参见regex demoRegulex graph

enter image description here

详细信息

  • ^-字符串的开头
  • .*?-除换行符以外的任何0+个字符,并且尽可能少
  • (?=\b(?:\d{1,3}\.){3}\d{1,3}$)-积极的前瞻性要求(紧邻当前位置的右侧):
    • \b-单词边界
    • (?:\d{1,3}\.){3}-三个重复的1到3位数字和一个点
    • \d{1,3}-1-3位数字
    • $-字符串的结尾。

要获取更精确的IP正则表达式,请参见How to Find or Validate an IP Address

^.*?(?=\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$)

请参见the regex demo