java - 如何使用正则表达式在 Java 中查找子字符串?
问题描述
我有一个名为的字符串,String mainString = "/abc/def&ghi&jkl";
我需要在 java 中使用 Regex 查找子字符串。子字符串将是lastindexof("/") and indexof("&")
ie def
。如何在 java 中使用正则表达式来做到这一点?
解决方案
也许是这样的:
(?<=\/)(?=[^\/]*$).*?(?=&)
(?<=\/)
- 正向向后看以匹配正斜杠之后的位置。(?=[^\/]*$)
- 带有否定字符类的正向前瞻,以匹配除正斜杠零次或多次后跟结束字符串位置之外的任何内容。.*?
- 匹配除 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]);
推荐阅读
- python - 根据另一个列表排序对对象列表进行排序
- reactjs - 渲染选择
- autohotkey - 在后台运行的 AHK 脚本
- java - Java Selenium 仅针对第一页重复打印表格行
- postgresql - 用于保持规范表与原始表同步的 Postgres 触发器
- linux - 在 NASM 汇编器中从键盘读取两次的问题
- azure - 将 Azure 应用服务连接到 keyvault 支持的应用配置会引发 403
- java - 一种优雅的方式来计算每个位置中每种类型的数量
- python - Pydroid 能识别 random.choice 吗?
- c# - 如何从 csv 文件中读取某个列?