让我们说我正在寻找一系列包含a
,b
和c
项目的文字及其排序顺序它们出现时可能会有所不同。
使用与Perl兼容的正则表达式,是否有"功能"这可以为您提供一个正则表达式来检测a
,b
和c
出现在行中某个位置不相关的行?
如果没有这样的功能,您将拥有“{1}}表达式”,N!
是唯一项目的数量。
N
我会选择能够生成正则表达式的在线工具。
注意:这个问题是语言不可知的,即单行正则表达式。 但是,如果所需的功能不是Perl兼容的正则表达式的本机,则可能需要使用Python或Perl等语言。
更新1
提出问题:如果regex = (.*a.*b.*c.*)|(.*a.*c.*b.*)|(.*b.*c.*a.*)|(.*b.*a.*c.*)|(.*c.*a.*b.*)|(.*c.*b.*a.*)
,a
,b
与c
,mess
,sag
重叠,会怎样?
是否应该构造正则表达式以使重叠的单词失败或成功搜索?
答案 0 :(得分:3)
您不需要那些不必要的管道,因为您只需从前瞻中受益:
(?=.*?a)(?=.*?b)(?=.*?c)
答案 1 :(得分:1)
不要试图将所有内容塞入单个正则表达式模式中。你正在使用Perl,所以使用Perl!
/a/ and /b/ and /c/
将完全按照您的要求执行
答案 2 :(得分:0)
使用pcre / perl正则表达式进行无序解析 无需排列。
(?:.*?(?:(?(1)(?!))(a)|(?(2)(?!))(b)|(?(3)(?!))(c))){3}
扩展
(?:
.*?
(?:
(?(1)
(?!)
)
( a ) # (1)
|
(?(2)
(?!)
)
( b ) # (2)
|
(?(3)
(?!)
)
( c ) # (3)
)
){3}
只需添加所需数量即可
如果您需要10个中的5个,只需更改范围量词
在{5,10}
的外部范围内。