当前位置: 首页 > 知识库问答 >
问题:

在可选组之间获取组

欧旻
2023-03-14

我正在尝试匹配下面句子中只包含“Jack”的组。我想创建一个正则表达式,它可以获取“hello”之后以及字符串“my friend”之前或之后的任何内容。

Greetings, hello my friend Jack
Greetings, hello Jack my friend
Greetings, hello Jack

以下不起作用:

val test = new Regex(“(.*)?(.|,)(你好|嘿)?(我的朋友)?(\\S.*)?(?=我的朋友))

关于如何在可选组之间建立一些组的任何建议都会很棒。

共有1个答案

袁山
2023-03-14

*pattern消耗了整个字符串,因此当它试图匹配句点或逗号模式时,就没有什么可匹配的了。这是因为*运算符是贪婪的:它尽可能多地吞食。

有两种简单的解决方案

> < li>

使用惰性变量< code >(。*?)?,它使用尽可能少字符来匹配后面的内容。

而不是使用< code >。要匹配所有内容,请使用求反的字符类来匹配“除了前面的内容之外的所有内容”。在你的例子中,除了逗号或句号之外的一切:([^.,]*)?

您可以在本教程中阅读有关此内容的信息。

您的正则表达式还有其他问题。例如,第二组中的句点将匹配任何字符(这使得|、选项多余)。

 类似资料:
  • 问题内容: 我有一个这样的类结构: 我的目标是调用get方法,然后检查它是否存在。如果存在,则返回该属性;如果不存在,则仅返回null。所以像这样: 当然,这不是正确的Java 8可选语法,但这就是我的“伪代码”。用Java 1行有什么办法实现这一点? 问题答案: 您正在描述的是方法: 如果值不存在,则可让您使用函数在内转换该值,如果不存在该值,则返回一个空值(可选)。 还要注意,您可以从映射函数

  • 作为一个例子,我有这样一个可选选项: 我想拥有桌面并在lambda表达式之外使用它。我这样做: 有没有更好的解决方案来获得桌面;像这样的? 编辑:OrElse是我在寻找的方法:)

  • 问题内容: 我希望“范围”是一个日期对象数组,两个日期之间的每一天。 诀窍在于它也应该处理月份和年份的边界。 问题答案:

  • 问题内容: 有没有办法返回JavaScript中两个数组之间的差? 例如: 问题答案: 我假设您正在比较普通数组。如果不是,则需要将 for 循环更改 为 for .. in 循环。 如果您不关心向后兼容性,那么更好的解决方案是使用过滤器。但是,此解决方案仍然有效。

  • 我是xslt新手。我希望将以下输入转换为如下所示的输出: 输入: 输出应为: 我想要<代码> XSL代码: 我得到的输出为: