首页 > 解决方案 > 如何使用正则表达式在 Java 中查找子字符串?

问题描述

我有一个名为的字符串,String mainString = "/abc/def&ghi&jkl"; 我需要在 java 中使用 Regex 查找子字符串。子字符串将是lastindexof("/") and indexof("&")ie def。如何在 java 中使用正则表达式来做到这一点?

标签: javaregexstringsubstring

解决方案


也许是这样的:

(?<=\/)(?=[^\/]*$).*?(?=&)
  • (?<=\/)- 正向向后看以匹配正斜杠之后的位置。
  • (?=[^\/]*$)- 带有否定字符类的正向前瞻,以匹配除正斜杠零次或多次后跟结束字符串位置之外的任何内容。
  • .*?- 匹配除 newlinge 以外的任何字符零次或多次但懒惰(阅读下一个)。
  • (?=&)- 正向前瞻以匹配字符串中后跟 . 的位置&

查看在线演示

注意:如@CarySwoveland 所述,您可以将积极的前瞻换成消极的前瞻:(?<=\/)(?!.*\/).*?(?=&)。查看演示


第二种选择是使用捕获组(根据@TheFourthBird):

/([^/&]+)&[^/]*$

在哪里:

  • /- 匹配文字正斜杠。
  • (- 打开捕获组。
    • [^/&]+- 一个否定字符类,至少匹配一次除正斜杠或 & 之外的任何字符。
    • )- 关闭捕获组。
  • &- 文字和符号。
  • [^/]*- 否定字符类,匹配除正斜杠以外的任何内容零次或多次。
  • $- 结束字符串 ancor。

查看在线演示


另外我不确定你是否需要正则表达式。我对Java没有任何经验,但通过一些谷歌搜索将其拼凑在一起:

public class Tst{    
     public static void main(String []args){
        String mainString = "/abc/def&ghi&jkl";
        String[] bits = mainString.split("/");
        String subbit = bits[bits.length-1].split("&")[0];
        System.out.print(subbit);
     }
}

返回:def

注意:split甚至作为带有嵌套命令的单行代码:System.out.print(mainString.split("/")[mainString.split("/").length - 1].split("&")[0]);


推荐阅读