Java 正则表达式 (java.util.regex)。搜索美元符号

2024-02-06

我有一个搜索字符串。 当它包含美元符号时,我想捕获此后的所有字符,但不包括点或后续的美元符号。后者将构成后续匹配。 因此,对于这些搜索字符串中的任何一个......:

"/bla/$V_N.$XYZ.bla";
"/bla/$V_N.$XYZ;

我想返回:

  • V_N
  • XYZ

如果搜索字符串包含百分比符号,我还想返回一对 % 符号之间的内容。

下面的正则表达式似乎可以解决这个问题。

 "%([^%]*?)%";

推断:

  • 以%开始和结束,
  • 有一个捕获组 - ()
  • 有一个包含除 % 符号之外的任何内容的字符类(脱字符号表示不是字符)
  • 重复 - 但不是贪婪*?

在某些语言允许的情况下%1, %2,对于捕获组,Java 使用backslash\number语法代替。因此,该字符串编译并生成输出。

我怀疑美元符号和点需要转义,因为它们是特殊符号:

  • $通常是字符串的结尾
  • .是任何字符的元序列。

我尝试过使用双反斜杠符号.. \

  • 两者都是字符类,例如[^\\.\\$%]
  • 并使用OR'd符号%|\\$

试图结合这种逻辑,但似乎无法发挥任何作用。

我不知道另一双眼睛是否能看到如何解决这个难题!

到目前为止我的尝试:

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class Main {
  public static void main(String[] args) {
        String search = "/bla/$V_N.$XYZ.bla";
        String pattern = "([%\\$])([^%\\.\\$]*?)\\1?";
  /* Either % or $ in first capture group ([%\\$])
   * Second capture group - anything except %, dot or dollar sign
   * non greedy group ( *?)
   * then a backreference to an optional first capture group \\1?
   * Have to use two \, since you escape \ in a Java string.
   */
        Pattern r = Pattern.compile(pattern);
        Matcher m = r.matcher(search);
        List<String> results = new ArrayList<String>();
          while (m.find()) 
        { 
          for (int i = 0; i<= m.groupCount(); i++) {
                results.add(m.group(i));
          }
        }
        for (String result : results) {
          System.out.println(result);
        }
  }
}

以下链接可能会有所帮助:

  • 一个交互式 Java 游乐场,您可以在其中进行实验和复制/粘贴代码 https://repl.it/~.
  • Regex101 https://regex101.com/
  • Java 正则表达式测试器 https://www.freeformatter.com/java-regex-tester.htm
  • Java 反向引用 https://www.logicbig.com/tutorials/core-java-tutorial/java-regular-expressions/regex-backreferences.html(可选的反向引用\\1在正则表达式中)。
  • 总结语言中常见的正则表达式特殊字符的链接 http://www.tads.org/t3doc/doc/sysman/regex.htm
  • Java Regex 书籍 EPub 链接 https://epdf.pub/java-regular-expressions-taming-the-javautilregex-enginebb1d05a7e538794b13b753aba70948a355735.html
  • 正则表达式信息网站 https://www.regular-expressions.info/charclass.html
  • Javadocs 中的 Matcher 类 https://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html

您可以使用

String search = "/bla/$V_N.$XYZ.bla";
String pattern = "[%$]([^%.$]*)";
Matcher matcher = Pattern.compile(pattern).matcher(search);
while (matcher.find()){
    System.out.println(matcher.group(1)); 
} // => V_N, XYZ

See the Java演示 https://ideone.com/TGBOpY正则表达式演示 https://regex101.com/r/Thvy2r/1.

NOTE

  • 您不需要可选的\1?在模式的末尾。由于它是可选的,因此它不限制匹配上下文并且是多余的(因为否定的字符类既不能匹配也不能匹配)$ nor%)
  • [%$]([^%.$]*)火柴% or $,然后将任何零个或多个捕获到组 1 中 以外的字符%, . and $。您只需要第 1 组值,因此,matcher.group(1)用来。
  • In a 字符类 https://www.regular-expressions.info/charclass.html, 两者都不. nor $是特殊的,因此,它们不需要转义[%.$] or [%$].
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 正则表达式 (java.util.regex)。搜索美元符号 的相关文章

  • 将 4 个字节转换为无符号 32 位整数并将其存储在 long 中

    我正在尝试用 Java 读取二进制文件 我需要读取无符号 8 位值 无符号 16 位值和无符号 32 位值的方法 执行此操作的最佳 最快 最美观的代码 是什么 我在 C 中做到了这一点 并做了类似的事情 uint8 t buffer uin
  • 为什么从 Eclipse 导出的可运行 JAR 不起作用?

    我有一个在 Eclipse 中运行良好的项目 但是 当我将其导出到可运行的 JAR 其中包含依赖项 时 它不会运行 从控制台运行 JAR 时出现的错误是 编辑 之前没有使用 jar 运行它 INFO Loading XML bean def
  • jUnit 中每个 @Test 的不同拆卸

    有没有办法为 jUnit 中的每个 Test 定义不同的拆卸 Use the After注释来指示每个之后要运行的方法 Test 像这样的全套注释是 BeforeClass 首先 Tests are run Before 在每个之前 Tes
  • 无法获取未知属性“运行时”Gradle 7.0

    我最近切换到 gradle 7 0 现在无法构建我的项目 jar 并出现错误 无法获取 org gradle api internal artifacts configurations DefaultConfigurationContain
  • 通过代理从java发送电子邮件

    我使用 Java Mail API 来发送和接收电子邮件 现在我做这个项目的地方有一个代理服务器 我可以知道如何通过代理服务器从java发送电子邮件吗 请参阅此处的常见问题解答 http www oracle com technetwork
  • 使用Keycloak保护Tomcat应用程序时出现HTTP 403禁止错误

    我为这个错误苦苦挣扎了一整天 我一遍又一遍地检查我在tomcat中Keycloak和APP的配置 没有发现错误 下图为测试场景 APP配置 1 Keycloak json是从Keycloak控制台复制的 2 context xml 也正确
  • 从 java.util.TimeZone 转换为 org.joda.DateTimeZone

    在Java中如何将一个实例转换为java util TimeZone to org joda DateTimeZone并保持夏令时 Joda Time 处于维护模式 The 乔达时间 http www joda org joda time
  • Android - 使用 Intent 打开 PDF 文档关闭后不保存

    我面临的问题是 当尝试保存对使用此 URI 打开的 PDF 文档的更改时内容 xx xxx xxx fileprovider external Download Sync FileName pdf 我所做的任何更改在关闭文档后都不会保存 但
  • 检查 jar 是否从 shell 运行

    我有一个 java jar 程序 我试图在我的机器启动时运行它 理想情况下 shell 脚本将每 60 秒检查一次以确保 jar 正在运行 我如何检查 jar 是否在 centos 上运行 这似乎不起作用 我当前的 sh 文件 bin ba
  • Java GUI,根据actionListener更改面板

    我在两个不同的面板中添加了两个按钮 如果单击第一个按钮 则需要转到下一个面板 其中包含第二个按钮 但是当我单击第一个按钮时 该按钮没有被替换 Java GUI import java awt event ActionEvent import
  • 如何跨工作区保存 E​​clipse 启动配置文件?

    当我复制 Eclipse 项目目录时 它包含 classpath 和 project 文件 这样当我将同一目录带到另一个 Eclipse 实例时 我不必设置我的构建路径等 假设所有资源都包含在在项目中 而不是外部 但是 此过程不会导致启动配
  • 查找前 N 个五边形数

    我必须找到第一个N pentagonal numbers 1 从 1 100 并每行显示 10 个 我必须使用getPentagonalNumber int n 方法也是如此 显然这就是它存在的原因 到目前为止 这是我的代码 package
  • 使用 Gradle 构建 Kotlin + Java 9 项目

    我对 Gradle 老实说 还有 Java 9 相当陌生 我正在尝试使用 Gradle 构建一个混合了 Java 9 和 Kotlin 的简单库项目 更详细地说 Java中有一个接口 Kotlin中有一个实现 我会用 Kotlin 做所有事
  • Maven 依赖冲突:org.w3c.dom.ElementTraversal

    我有一个 Java 代码库 它使用 Maven 进行依赖项解析并在 CI 上运行测试 经过最近的一批开发 大到足以很难识别重大更改 我的一些测试现在在通过 Maven 运行时失败了NoClassDefFoundError for org w
  • Spring 4 MVC 和 Websockets - 没有合适的默认 RequestUpgradeStrategy

    我需要 Websockets 在我的应用程序中进行实时更新 所以我找到了这个例子并一步一步地做到了here http raymondhlee wordpress com 2014 01 19 using spring 4 websocket
  • 如何删除 Spring 的 RestTemplate 添加的某些 HTTP 标头?

    我在远程服务方面遇到问题 我无法控制对使用 Spring 的 RestTemplate 发送的请求进行 HTTP 400 响应 使用发送的请求curl但被接受了 所以我将它们与通过 RestTemplate 发送的内容进行了比较 特别是 S
  • 嵌套异常是java.lang.NoClassDefFoundError:无法初始化类org.springframework.jdbc.support.SQLErrorCodesFactory

    我正在使用 spring 和 jdbctemplate 编写一个应用程序 但是我遇到了以下错误 org springframework web util NestedServletException Handler processing f
  • 访问 JAR 资源

    我有一个jar包含我想要分发的资源 主要是缓存 日志记录等配置 的文件 我对这些资源的相对路径有问题 所以我做了我在另一个 stackoverflow 问题中发现的问题 该问题说这是一种有效的方法 ClassInTheSamePackage
  • Selenium 查看鼠标/指针

    有什么方法可以在运行测试时真正看到硒鼠标吗 要么是 Windows 光标图像 要么是某种点或十字线或任何东西 我正在尝试使用拖放功能selenium and java in an HTML5Web 应用程序 并且能够看到光标以了解它实际在做
  • 如何在 Hibernate 中使用 SELECT 进行 INSERT

    我需要在休眠中实现以下请求 insert into my table max column values select max id from special table where 如何在休眠中使用注释来做到这一点 Special tab

随机推荐

  • 调整图像大小以在 TensorFlow 中进行训练

    我尝试读取自己的图像以在 TensorFlow 中进行训练 然而 似乎有一个错误 ValueError size must be a 1 D Tensor of 2 elements new height new width 下面的代码示例
  • 在 Magento 产品页面上显示一次价格

    我只想在 Magento 产品页面上显示一次产品价格 目前 它显示两次 我尝试改变app design frontend base default template catalog product price phtml 但没有得到它 我也
  • 如何限制 Flutter 中滚动视图的滚动距离?

    我制作了一个页面 其中包含列中的多个文本字段和按钮 该列包含在具有背景图像的容器中 这个容器本身就是滚动视图小部件的子级 因此 当一个人单击其中一个字段时 他们的键盘将会弹出 占据屏幕的一部分 这意味着某些按钮 字段位于屏幕外 这就是滚动视
  • 如何为从 swagger 生成的特定 POJO 生成 @JsonInclude(value = JsonInclude.Include.NON_NULL) ?

    我的请求对象是通过 openapi generator maven plugin 基于 json 接口文件自动生成的 我想要这个注释 JsonInclude value JsonInclude Include NON NULL 在自动生成的
  • sessionStorage 更改不会触发“存储”事件

    我正在关注这里 https developer mozilla org en US docs Web API Web Storage API Using the Web Storage API看看如果有人打开了多个选项卡 我是否可以在我的网
  • Android 中的 SVG/VectorDrawable 问题

    我在我的 Android 项目中使用了 svg 文件 Android 4 4以下版本存在问题 我已经尝试过这些解决方案 app srcCompat vectorDrawables useSupportLibrary true在 gradle
  • CodeIgniter 4... documentRoot 未公开... htaccess 不起作用

    我开始涉足 CodeIgniter 4 完成了一个简单的应用程序 在本地 我将文档根设置为 public 而在产品托管环境中 我无法将文档根设置为 public 相反 它位于 root 中 所以结构是这样的 root admin app s
  • 如何让用户从控制台输入任意数量的变量

    这是我编写的代码 用于掷两个骰子 直到出现一对 我的问题是 有没有办法让用户输入他 她想要的任意数量的骰子 我不想创建 50 个 int 骰子 如果我使用数组或列表 我也会遇到同样的问题 我必须将每个数组部分分配给 numbergen 50
  • 使用嵌入式 Jetty 在 WAR 之外提供静态内容

    我有一个 WAR 通过嵌入式 Jetty 提供服务 我想包含静态文件战争之外 我的目标是 从 WAR 外部的路径 相对于嵌入式 Jetty 运行的目录 提供静态文件 所以 如果我调用 jar srv app 我想配置一个 URLhttp m
  • 使用 Wicket + Spring + Hibernate 的三层分层应用程序。您将如何处理交易?

    我正在考虑使用在视图中打开会话 OSIV Spring 附带的过滤器或拦截器 因为对于我作为开发人员来说这似乎是一种方便的方法 如果这是您的建议 您是否建议使用过滤器或拦截器 为什么 我也想知道它将如何与Hibernate模板如果我将失去将
  • 反应本机 - 反应上下文,如图标操作

    我目前使用反应上下文存储我的用户 每个用户可以喜欢任意数量的帖子 我的后端有一个名为 isLiked 的参数 对于每个用户的每个帖子来说 该参数可以为 true 或 false 这是我的代码 我尝试了一个解决方案 我的问题是 当我按下概述的
  • Node.js:是否有关于 process.env 变量的任何文档

    I use process env在我的程序中 这个变量似乎与我的程序无关 没有它我的应用程序也可以正常运行 那么如何才能充分利用process env 有相关的文档或者教程吗 试试这个链接http nodejs org api proce
  • 输入材料芯片——初始形式数组

    我想用输入数据初始化我的垫芯片输入 但是当我有两个芯片时 它仅形成一种形式 组件 ts Component selector app pps dialog templateUrl pps dialog component html expo
  • 将 pandas 日期时间月份转换为字符串表示形式

    我想要一个带有时间戳列的 pandas DataFrame 并且想要创建一个仅包含月份的列 我想要月份列包含月份的字符串表示形式 而不是整数 我做了这样的事情 df Dates pd to datetime df Dates df Mont
  • pythonlogging.FileHandler默认使用块缓冲吗?

    The logging处理程序类有一个flush 方法 并看着code https github com python cpython blob 2 7 Lib logging init py logging FileHandler调用时不
  • bash: /bin/tar: 使用 tar 压缩多个文件时参数列表太长

    我正在尝试使用以下命令压缩存档中的文件 tar czvf compress file tar gz cat file list txt 我有一个错误 bash bin tar Argument list too long 文件编号太长 如何
  • 在Android中生成并打印特定尺寸的PDF

    我正在使用 Android 应用程序 我想生成并打印 PDF 但我遇到了一些麻烦 我需要生成PDF与 80 毫米width 以及height可能会有所不同 我正在尝试这个 public class PDFGenerator implemen
  • 为位于系统托盘中的 Java 程序创建键盘挂钩

    基本上我有一个在系统托盘中运行的java程序 并且想添加它 因此如果用户按下CTRL SHIFT 1 它会选择位于托盘中的java程序的右键单击选项之一 我想我正在寻找的是有关执行此操作的教程 或者最简单的方法是什么 我以前从未做过这样的事
  • 删除不在远程的分支

    gt git branch a master test remotes origin master remotes origin test 当有人删除remotes origin test 我的电脑上仍然可以看到它 我知道我可以做到这一点并
  • Java 正则表达式 (java.util.regex)。搜索美元符号

    我有一个搜索字符串 当它包含美元符号时 我想捕获此后的所有字符 但不包括点或后续的美元符号 后者将构成后续匹配 因此 对于这些搜索字符串中的任何一个 bla V N XYZ bla bla V N XYZ 我想返回 V N XYZ 如果搜索