我是一个完全的正则表达式新手,花了几个小时试图解决这个难题。我认为我必须使用某种可选的非捕获组或交替。
我想匹配以下字符串:
>
诺伊尔电影 a von 1000
诺伊尔电影a von 1000 mit b
诺伊尔电影a von 1000 mit b und c
1000英镑的新电影
诺伊尔电影公司
诺伊尔电影a mit b und c
诺伊尔电影a mit b und c und
我的正则表达式如下所示:
var regex = /(?:[nN]euer [Ff]ilm\s?)(.*)(?:[vV]on).(\d{4}).(?:[Mm]it)(.*)(?:[uU]nd)(.*)/g;
问题是它只匹配字符串 3 和 4。它与最后两个“und”不匹配,而是将其包装在第3组中,而不是在第4组中。
有人可以帮我的正则表达式(这不是非常用户友好的;)
你真的需要使用非捕获可选组(比如< code >(?:...)?),但是除此之外,您还需要锚点(^
匹配字符串的开头,而< code>$匹配字符串的结尾)和懒惰点匹配模式(< code >)。*?,以匹配尽可能少的任何字符)。
您可以使用
/^[nN]euer [Ff]ilm\s*(.*?)(?:\s*[vV]on\s+(\d{4}))?(?:\s+[Mm]it\s*(.*?)(?:\s*[uU]nd\s*(.*))?)?$/
参见正则表达式演示。在演示中,< code>/gm修饰符是必需的,因为输入是多行字符串。
模式详细信息:
^
-字符串锚的开始[nN]euer[Ff]ilm
-诺伊尔胶片
/诺伊尔胶片
/诺伊尔胶片
\s*
-零个或多个空格(. *?)
-第1组:除换行符之外的任何0个字符,尽可能少(即,直到后续子模式的最左边出现)(?:\s*[vV]on\s(\d{4}))?
-1或0次出现:
\s*
-0个空格[vV]on
-von
orVon
\s
-1个空格(\d{4})
-组2:4位\s
- 1个空格 < Li > < code >[Mm]it -< code > Mit 或< code>mit < li>
\s*
- 0个空格 < li > <代码>(*?) -组3匹配除换行符以外的任何0字符,越少越好 < li>
(?:\s*[uU]nd\s*。*))?
-可选的非捕获组匹配 < ul > < Li > < code > \ s *[uU]nd \ s * -< code>und或< code > Und 用0个空格括起来 < li > <代码>(*) - Group 4尽可能多地匹配除换行符以外的任何0字符
var strs = ['Neuer Film a von 1000','Neuer Film a von 1000 mit b','Neuer Film a von 1000 mit b und c','Neuer Film a von 1000 mit b und c und d','Neuer Film a mit b','Neuer Film a mit b und c','Neuer Film a mit b und c und d'];
var rx = /^[nN]euer [Ff]ilm\s*(.*?)(?:\s*[vV]on\s+(\d{4}))?(?:\s+[Mm]it\s*(.*?)(?:\s*[uU]nd\s*(.*))?)?$/;
for (var s of strs) {
var m = rx.exec(s);
if (m) {
console.log('-- ' + s + ' ---');
console.log('Group 1: ' + m[1]);
if (m[2]) console.log('Group 2: ' + m[2]);
if (m[3]) console.log('Group 3: ' + m[3]);
if (m[4]) console.log('Group 4: ' + m[4]);
}
}
在Python中,如何在非捕获组中捕获组?换句话说,如何重复包含捕获组的非捕获子模式? 例如,捕获导入字符串上的所有包名。例如,字符串: 导入熊猫、操作系统、系统 将返回“pandas”、“os”和“sys”。下面的模式捕获第一个包并到达第二个包: 从这里,我想重复捕获组并匹配以下字符的子模式,即。当我用一个非捕获组包围这个子模式并重复它时: 它不再捕捉里面的群体。
我有一个具有多个可选和非捕获组的正则表达式。所有这些组都可能发生,但不必发生。正则表达式应使用非捕获组返回整个字符串。 当我将最后一个组也设置为可选时,正则表达式将具有多个分组结果。当我将第一组设置为非可选时,正则表达式匹配。为什么? 输入将类似于,预期输出。 提前感谢!
本文向大家介绍PHP正则表达式之捕获组与非捕获组,包括了PHP正则表达式之捕获组与非捕获组的使用技巧和注意事项,需要的朋友参考一下 今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可行的,于是总结一下,分享的同时也希望有大神和细心的学习者找到我理解中
我有一个带有(?:)格式的非捕获组的java正则表达式,我不明白为什么它为非捕获组提供“null”匹配。 如果我将下面的正则表达式缩短为“@te(st)(?:AA)?”使用相同的?:非捕获组,它给出了我认为的预期行为,只匹配1个组和完全匹配。
我有一个带有(?:)格式的非捕获组的java正则表达式,我不明白为什么它为非捕获组提供“null”匹配。 如果我把下面的正则表达式缩短为“@te(st)(?:aa)?”用同样的非捕获组,它给出了我所期望的行为,只匹配1组和完全匹配。 参见下面的正则表达式: 结果: “@te(st)(?:aa)”的结果使用相同的代码: 第一个将非捕获组匹配为null的正则表达式是什么?
假设我有这个虚拟URL,我需要提取植物及其颜色作为 下面的I have正在按预期捕获我需要的元素,但是当我的URL中的植物少于4株时,它无法捕获任何东西。底部有一个指向regex测试员的链接,其中有示例代码和URL,您可以使用。 如何修改这个正则表达式,使其动态工作,从而在不需要静态URL结构的情况下捕获可用内容。现在,假设我最多只能捕获4株植物(8组) https://regex101.com/