假设我有以下字符串:
name1=gil;name2=orit;
我想查找的所有匹配项,name=value
并确保整个字符串与模式匹配。
所以我做了以下事情:
Pattern p = Pattern.compile("^((\\w+)=(\\w+);)*$");
Matcher m = p.matcher(line);
if (!m.matches()) {
return false;
}
name=value
Pattern p = Pattern.compile("(\\w+)=(\\w+);");
Matcher m = p.matcher(line);
while (m.find()) {
map.put(m.group(1), m.group(2));
}
有没有办法用一个正则表达式来做到这一点?
您可以通过以下方式验证和迭代一个正则表达式的匹配:
name1=x;;name2=y;
通过\G
在正则表达式的开头放置a来确保匹配之间没有不匹配的字符(例如),这意味着“上一个匹配的结束”。
通过将字符串的长度与进行比较,以检查是否在最后一次匹配中到达了字符串的末尾,该字符串的长度Matcher.end()
返回了最后一个匹配后的偏移量。
就像是:
String line = "name1=gil;name2=orit;";
Pattern p = Pattern.compile("\\G(\\w+)=(\\w+);");
Matcher m = p.matcher(line);
int lastMatchPos = 0;
while (m.find()) {
System.out.println(m.group(1));
System.out.println(m.group(2));
lastMatchPos = m.end();
}
if (lastMatchPos != line.length())
System.out.println("Invalid string!");
现场演示。
某些语言可能允许您直接从迭代各个匹配项 ^((\\w+)=(\\w+);)*$
,但我不相信您可以使用Java来做到这一点。
问题内容: 说我的数据看起来像这样: 我可以创建一个正则表达式 要将名称,年龄和id匹配到第1组中,将peter,40、99匹配到第2组中。但是,我要迭代甚至选择地遍历这些组。例如, 如果group1值是id,我想进行其他处理。所以算法就像 我想做的第二件事就是跳转到匹配的group1的第三个实例,并获取键“ id”,而不是进行迭代。 问题答案: 使用FindAllStringSubmatch查找
如何简化这个正则呢? 或者是否有其他实现方式(正则)?
正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。 1956 年, 一位叫 Stephen Kleene 的数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为“神经网事件的表示法”的论文,引入了正则表达式的概念。正则表达式就是用来描
如何在不包含连续子字符串baa的字母表{a,b,c}上表达正则表达式?
(?:x) (x) 这两个好像可以平价替换的吧。有什么特殊应用吗?
问题内容: 我目前正在将Web应用程序代码从PHP移植到JS。 我对此正则表达式有疑问。从PHP 这样使用 如何将其转换为在JS上工作? 先感谢您 问题答案: 没什么特别的。PHP regex语法与JavaScript中的语法非常相似: 您可以从 MDN的 本手册中找到有关JavaScript 中正 则表达式的更多信息:https : //developer.mozilla.org/en- US/