Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式量词(无重复)_Regex - Fatal编程技术网

Regex 正则表达式量词(无重复)

Regex 正则表达式量词(无重复),regex,Regex,我正在尝试使用正则表达式来查找序列中的字符组合。以下是所有有效选项: ABCD AD ACD BDC BD B CD CDE EDA EDB E 这些字符将在一个更大的字符串中稍加标记,例如,按顺序或其他方式 "Here is a string that will ABCD have some in it" -- ABCD (1 occurrence) "Another string with EDAEDBCD some in it" -- EDA, EDB, CD (3 occurrence

我正在尝试使用正则表达式来查找序列中的字符组合。以下是所有有效选项:

ABCD
AD
ACD
BDC
BD
B
CD
CDE
EDA
EDB
E
这些字符将在一个更大的字符串中稍加标记,例如,按顺序或其他方式

"Here is a string that will ABCD have some in it" -- ABCD (1 occurrence)
"Another string with EDAEDBCD some in it" -- EDA, EDB, CD (3 occurrences)
"Here ACD is a E string with ACD a bunch AD" -- ACD, E, ACD, AD (4 occurrences)
"And another ABCDE" -- ABCD, E (2 occurrences)
使用以下正则表达式,我可以找到每个字符组合对包含另一个字符的每个字符都具有最长的选项:

(A(?:[C|B|D](?:[C|D](?:[D])?)?))|
(C(?:[D](?:[E])?))|
(B(?:[D](?:[C])?)?)|
(E(?:[D](?:[A|B]))?)
我想用一个正则表达式来确定该字符串是否仅使用每个序列的最长版本从该列表中有三个或更多实例,即尽管BD和B都是有效选项,但BDC计数为1。我尝试过使用{3,}量词,但它会对集合进行双重计数


不幸的是,系统只接受正则表达式的真/假结果,我不能用它做更多的事情。我知道这是不可能的。

< P> Perl或C++,几乎是不同的频谱末端。你至少需要 保留最长子串的原子组

如果您使用的引擎没有原子组,那么它就不会这样做

m^?>.*:ABCD | AD | ACD | BDC | BD | B | CDE | CD | EDA | EDB | E{3}

扩大

 (?m)          # Multi-line mode
 ^             # Beginning of line
 (?>           # Atomic group, get one of these exactly 3 times
      .*?   
      (?:
           ABCD
        |  AD
        |  ACD
        |  BDC
        |  BD
        |  B
        |  CDE
        |  CD
        |  EDA
        |  EDB
        |  E
      )
 ){3}

你用的是什么口味的正则表达式?不同的编程语言支持不同的特性。@ 4Cask似乎是Perl或C++,我很不幸地不得不把它输入到仪表板中,并且它被应用在幕后,而我们的代表们对支持该技术的实际机制一无所知。dashboard@Jan不幸的是,没有,该表达式将包括具有3个或更多字符的A-E的任何组合,而不是将每个给定的可能性识别为一个不同的结果,它还包括一些我不想看到的组合for@Josh这是什么意思?这是两种可能性:ABCD和E与{3,}匹配量词大概是因为ABCD、B、CD、CDE和E都包含在其中。但是,如果我在不使用量词的情况下全局运行正则表达式,它将成功地分别标识ABCD和E。幸运的是,这也不起作用,这将匹配一个带有ABCDCD的字符串,其中只包含给定集合中的两个。我从未使用过原子分组,所以感谢您的指导@乔希-我想现在可以了。必须从行的开头检查它,否则它会逃逸上一个正则表达式中的原子组。