Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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 正则表达式匹配{1,2,3,4}的所有置换而不重复_Regex_Permutation_Lookahead_Negative Lookahead - Fatal编程技术网

Regex 正则表达式匹配{1,2,3,4}的所有置换而不重复

Regex 正则表达式匹配{1,2,3,4}的所有置换而不重复,regex,permutation,lookahead,negative-lookahead,Regex,Permutation,Lookahead,Negative Lookahead,我正在ruby中实现以下问题 以下是我想要的模式: 1234、1324、1432、1423、2341等 i、 e.四位数字中的数字应介于[1-4]之间,且不应重复 为了让你们简单地理解,我采用了两位数的模式 解决办法应该是: 12、21 i、 e.数字应为1或2,且不重复 为了确保它们不重复,我想用$1作为我第二个数字的条件,但它不起作用 请帮助我,并提前表示感谢。您可以使用此(): 第一个断言确保它是^[1-4]{4}$,第二个断言是一个负前瞻,确保您无法匹配*(.).*\1,即重复字符。第一

我正在ruby中实现以下问题

以下是我想要的模式:

1234、1324、1432、1423、2341等

i、 e.四位数字中的数字应介于[1-4]之间,且不应重复

为了让你们简单地理解,我采用了两位数的模式 解决办法应该是: 12、21

i、 e.数字应为1或2,且不重复

为了确保它们不重复,我想用$1作为我第二个数字的条件,但它不起作用

请帮助我,并提前表示感谢。

您可以使用此():

第一个断言确保它是
^[1-4]{4}$
,第二个断言是一个负前瞻,确保您无法匹配
*(.).*\1
,即重复字符。第一个断言是“更便宜”,因此您希望首先这样做

工具书类
相关问题

为了逗你一笑,这里还有另一个选择:

^(?:1()|2()|3()|4()){4}\1\2\3\4$
在使用每个唯一字符时,它后面的捕获组捕获一个空字符串。反向引用还尝试匹配空字符串,因此如果其中一个未成功,则只能表示关联组未参与匹配。只有当字符串至少包含一个副本时,才会发生这种情况


任何正则表达式风格都不正式支持这种空捕获组和反向引用的行为,因此请注意emptor。但它在大多数情况下都能工作,包括Ruby。

我认为这个解决方案更简单一些

^(?:([1-4])(?!.*\1)){4}$
看到了吗

(?!.*\1)
是一个,以确保字符不会重复


^
$
是匹配字符串开头和结尾的锚点。

虽然前面的答案解决了这个问题,但它们并不像可能的那样通用,并且不允许在初始字符串中重复。例如,
{a,a,b,b,c,c}
。问了一个问题后,给出了:


类似地,这适用于字符串中较长的“符号”,也适用于可变长度的符号。

不带正则表达式:str.chars.sort.join==“1234”我复制并粘贴了此表达式,并尝试了文本1244,它与之匹配。它不能防止重复。@gsingh2011:RegExr是一个Flash应用程序,这意味着它使用ActionScript风格。ActionScript实现了ECMAScript标准,该标准规定,对尚未参加比赛的组的反向引用总是成功的,无论该组应该匹配什么。请参阅以进行讨论。这个噱头在JavaScript或VBScript中也不起作用,如果您指定
ECMAScript
选项,它在.NET中也不起作用,尽管它不起作用。感谢您的澄清。这很有趣。+1**第一个断言是“更便宜”,所以您希望先这样做**
^(?:([1-4])(?!.*\1)){4}$
^                  # matches the start of the string
    (?:            # open a non capturing group 
        ([1-4])    # The characters that are allowed the found char is captured in group 1
        (?!.*\1)   # That character is matched only if it does not occur once more
    ){4}           # Defines the amount of characters
$
^(?:(?!\1)a()|(?!\2)a()|(?!\3)b()|(?!\4)b()|(?!\5)c()|(?!\6)c()){6}$