Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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或0,至少有一个1?_Regex - Fatal编程技术网

Regex 正则表达式在文件中搜索一组括号,括号内有八个字符,都是1或0,至少有一个1?

Regex 正则表达式在文件中搜索一组括号,括号内有八个字符,都是1或0,至少有一个1?,regex,Regex,我试图在一个文件中搜索一组括号,括号内有八个字符,都是1或0,至少有一个1。 我目前正在使用下面的正则表达式,列举所有可能的括号集,即强制使用。 有更好的方法吗 我的正则表达式: (11111110)|(11111101)|(111111100)|(11111111 011)|(11111 010)|(11111 001)|(11111 000)|。|(11111111111)等您可以使用这个正则表达式 \((?=[10]{8})(?=.*1.*).{8}\) 说明: \(-->匹配文本((

我试图在一个文件中搜索一组括号,括号内有八个字符,都是1或0,至少有一个1。 我目前正在使用下面的正则表达式,列举所有可能的括号集,即强制使用。 有更好的方法吗

我的正则表达式:


(11111110)|(11111101)|(111111100)|(11111111 011)|(11111 010)|(11111 001)|(11111 000)|
|(11111111111)

您可以使用这个正则表达式

\((?=[10]{8})(?=.*1.*).{8}\)
说明:

  • \(
    -->匹配文本
    (起始大括号))
  • (?=[10]{8})
    -->向前看,确保接下来的八个字符仅由零和一组成
  • (?=.*1.*)
    -->向前看,确保至少存在一个“1”字符
  • {8}
    -->正好匹配八个字符
  • \)
    -->匹配文字
    (右括号)
使用

grep -oP '\((?=[01]{8}\))0*1[10]*\)' file

详细信息

  • -o
    -输出匹配项,而不是匹配行
  • P
    -启用PCRE正则表达式引擎
模式

  • \(
    -a
    字符
  • (?=[01]{8}\)
    -需要八个
    0
    1
    字符(最多一个
  • 0*
    -0+0
  • 1
    -a
    1
    char
  • [10]*
    -0或更多零或一
  • \)
    -a

此正则表达式也可以工作:

(?!\(00000000\))\(\d{8}\)

是的,请使用
grep-oP'\b(?=[01]{8}\b)0*1[10]*'
请看,我修改了我的评论,因为我没有意识到您希望在括号内匹配这些二进制数据。感谢您的帮助,但是仍然可以找到我希望避免的字符串(00000000),因为它与基本大小写不匹配(00000000)。检查这个,这个也很好用。当然,正如Wiktor所说的“伟大的Regexer”:)参见。