- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有以下行,
typeName="ABC:xxxxx;";
我需要获取单词ABC
,
我写了以下代码片段,
Pattern pattern4=Pattern.compile("(.*):");
matcher=pattern4.matcher(typeName);
String nameStr="";
if(matcher.find())
{
nameStr=matcher.group(1);
}
所以如果我放 group(0)
我得到 ABC:
但如果我放 group(1)
它是 ABC
,所以我想知道
这个0
和1
是什么意思?如果有人能用很好的例子解释我会更好。
正则表达式模式中包含一个 :
,那么为什么 group(1)
结果会忽略它呢?第 1 组是否检测到括号内的所有单词?
那么,如果我再放两个括号,例如 \\s*(\d*)(.*)
: 那么,会有两组吗? group(1)
将返回 (\d*)
部分,group(2)
返回 (.*)
部分?
提供代码片段的目的是为了消除我的困惑。这不是我正在处理的代码。上面给出的代码可以用 String.split()
以更简单的方式完成。
最佳答案
捕获组 (pattern)
创建一个具有 capturing 属性的 group。
您可能经常看到(和使用)的相关一个是(?:pattern)
,它创建了一个没有 capturing 属性的 group,因此命名为 non-capturing group。
当您需要重复一系列模式时,通常使用组,例如(\.\w+)+
,或指定更改应在何处生效,例如^(0*1|1*0)$
( ^
,然后是 0*1
或 1*0
,然后是 $
)与 ^0*1|1*0$
(^0*1
或 1*0$
)。
一个捕获组,除了分组,还会记录捕获组内模式匹配的文本(pattern)
.使用您的示例,(.*):
, .*
匹配 ABC
和 :
匹配 :
,并且因为 .*
在捕获组内 (.*)
, 正文 ABC
为捕获组 1 记录。
整个模式定义为组号0。
模式中的任何捕获组都从 1 开始索引。索引由捕获组的左括号的顺序定义。例如,以下是 所有 5 个捕获组,采用以下模式:
(group)(?:non-capturing-group)(g(?:ro|u)p( (nested)inside)(another)group)(?=assertion)
| | | | | | || | |
1-----1 | | 4------4 |5-------5 |
| 3---------------3 |
2-----------------------------------------2
组号用于反向引用 \n
在模式和 $n
在替换字符串中。
在其他正则表达式风格(PCRE、Perl)中,它们也可用于子例程调用。
您可以通过 Matcher.group(int group)
访问特定组匹配的文本.组号可以按照上述规则进行识别。
在某些正则表达式(PCRE、Perl)中,有一个分支重置功能,允许您使用相同的数字来捕获组在不同的交替分支中。
从 Java 7 开始,您可以定义 named capturing group (?<name>pattern)
,您可以访问与 Matcher.group(String name)
匹配的内容.正则表达式更长,但代码更有意义,因为它指示您尝试使用正则表达式匹配或提取的内容。
组名用于反向引用 \k<name>
在模式和 ${name}
在替换字符串中。
命名的捕获组仍然使用相同的编号方案进行编号,因此也可以通过 Matcher.group(int group)
访问它们.
在内部,Java 的实现只是从名称映射到组号。因此,您不能为 2 个不同的捕获组使用相同的名称。
关于Java 正则表达式捕获组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16517689/
我有一个加号/减号按钮,希望用户不能选择超过 20 个但不知道如何让它工作。我尝试使用 min="1"max="5 属性,但它们不起作用。这是我的代码和一个 fiddle 链接。https://jsf
我正在尝试复制顶部底部图,如示例 here但它没有正确渲染(紫色系列有 +ve 和 -ve 值,绿色为负值)留下杂乱的人工制品。我也在努力创建一个玩具示例来复制这个问题,所以我希望尽管我缺乏数据,但有
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 已关闭 6 年前。 社区去年审查了是
这个问题在这里已经有了答案: Adding two positive integers gives negative answer.Why? (4 个答案) 关闭 5 年前。 我遇到了一个奇怪的问题
有谁知道如何将字符串值类型 -4,5 或 5,4 转换为 double -4.5 或 5.4? 最佳答案 只需使用 Double.parseDouble(Locale, String); 糟糕,我很困
我正在尝试根据 TextBlob 分类插入一个仅包含“正”或“负”字符串的新数据框列:对于我的 df 的第一行,结果是 ( pos , 0.75, 0.2499999999999997)我想要' 正
我对 VBA 非常陌生,无法理解如何在一个循环中完成 2 个任务。我非常感谢您的帮助。 我已经能够根据第 3 列中的数据更改第 2 列中的数值,但我不明白如何将负值的字体更改为红色。 表格的大小每月都
欢迎, 我正在使用 jquery 通过 POST 发送表单。 这就是我获得值(value)的方式。 var mytext = $("#textareaid").val(); var dataStrin
double d = 0; // random decimal value with it's integral part within the range of Int32 and always p
我有这个字符串: var a='abc123#xyz123'; 我想构建 2 个正则表达式替换函数: 1) 用 '*' 替换所有确实有 future '#'的字符(不包括'#') 所以结果应该是这样的
我正在使用 DialogFragment。当用户从 Gmail 平板电脑应用程序的屏幕与下面示例图片中的编辑文本进行交互时,我希望正面和负面按钮保持在键盘上方。 在我的尝试中不起作用,这是我的 Dia
从组装艺术一书中,我复制了这句话: In the two’s complement system, the H.O. bit of a number is a sign bit. If the H.O
是否有更好更优雅的方法来实现下面的简单代码(diffYear、A 和 B 是数字): diffYear = yearA - yearB; if (diffYear == 0) { A = B
我正在设计一种语言,并尝试确定 true 应该是 0x01 还是 0xFF。显然,所有非零值都将转换为 true,但我正在尝试确定确切的内部表示。 每种选择的优点和缺点是什么? 最佳答案 没关系,只要
在我的 dialogfragment 类的 OnCreateDialog 中,我正在这样做: AlertDialog.Builder builder = new AlertDialog.Builder
这个问题在这里已经有了答案: Resolving ambiguous overload on function pointer and std::function for a lambda usin
我偶然发现了一个奇怪的 NSDecimalNumber 行为:对于某些值,调用 integerValue、longValue、longLongValue 等,返回意想不到的值(value)。示例: l
这个问题在这里已经有了答案: Resolving ambiguous overload on function pointer and std::function for a lambda using
我有这个正则表达式来测试用户输入是否有效: value.length === 0 || value === '-' || (!isNaN(parseFloat(value)) && /^-?\d+\.
我想用高斯混合模型拟合数据集,数据集包含大约 120k 个样本,每个样本有大约 130 个维度。当我使用 matlab 执行此操作时,我运行脚本(簇号为 1000): gm = fitgmdist(d
我是一名优秀的程序员,十分优秀!