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 awk正则表达式字符/模式的最后一次出现_Regex_Awk - Fatal编程技术网

Regex awk正则表达式字符/模式的最后一次出现

Regex awk正则表达式字符/模式的最后一次出现,regex,awk,Regex,Awk,我需要得到模式最后一次出现的索引。尝试了来自和的想法。如果我想要最后一个:(索引为6)的索引,则以下内容不起作用。试图使用锚点$,但显然没有抓住它(因为它第一次出现,即3)。非常感谢你的解释 echo 12:45:78 | awk ' { print match($1, /:.+$/) }' 你需要使用 /:[^:]*$/ 这里,[^::]*(一个[^…]是一个反括号表达式)将匹配0+个字符,而不是:,因此,只有最后一个:与第一个:匹配 注意:对您来说几乎是正确的,唯一的区别是量词:如果您

我需要得到模式最后一次出现的索引。尝试了来自和的想法。如果我想要最后一个
(索引为6)的索引,则以下内容不起作用。试图使用锚点
$
,但显然没有抓住它(因为它第一次出现,即3)。非常感谢你的解释

echo 12:45:78 | 
awk '
{
print match($1, /:.+$/)
}'
你需要使用

/:[^:]*$/
这里,
[^::]*
(一个
[^…]
是一个反括号表达式)将匹配0+个字符,而不是
,因此,只有最后一个
与第一个
匹配

注意:对您来说几乎是正确的,唯一的区别是量词:如果您将
+
[^::]
一起使用,您将无法匹配输入字符串末尾的
。因此,
*
是您想要的量词

图案细节

  • -一个
    后跟
  • [^:::*
    -除
    以外的任何0+字符:
  • $
    -字符串结束
您需要使用

/:[^:]*$/
这里,
[^::]*
(一个
[^…]
是一个反括号表达式)将匹配0+个字符,而不是
,因此,只有最后一个
与第一个
匹配

注意:对您来说几乎是正确的,唯一的区别是量词:如果您将
+
[^::]
一起使用,您将无法匹配输入字符串末尾的
。因此,
*
是您想要的量词

图案细节

  • -一个
    后跟
  • [^:::*
    -除
    以外的任何0+字符:
  • $
    -字符串结束

    • 这里不需要使用任何正则表达式,因为awk允许您使用分隔符分割文件

      使用
      作为输入字段分隔符后,从总行长中减去最后一个字段的长度,得到如下正确索引:

      awk -F: '{print length($0) - length($NF)}' <<< '12:45:78'
      
      6
      

      awk-F:'{print length($0)-length($NF)}'这里不需要使用任何正则表达式,因为awk允许使用分隔符分割文件

      使用
      作为输入字段分隔符后,从总行长中减去最后一个字段的长度,得到如下正确索引:

      awk -F: '{print length($0) - length($NF)}' <<< '12:45:78'
      
      6
      

      awk-F:'{print length($0)-length($NF)}使用
      /:[^:]*$/
      [^:]*
      将匹配0+字符,而不是
      )实际上,符合您的场景。你是怎么尝试的?是的,我现在明白了——已经注意到了。变得更聪明…所以
      :[^:::
      说一个
      ,然后说除了
      以外的任何字符多次?是的。不要忘记$anchor。另外,请检查anubhava的答案,这可能对您更合适(除非您需要更多的东西来检查您的输入,而这些东西确实需要正则表达式)。使用
      /:[^:]*$/
      [^::]*
      将匹配0+个字符,而不是
      )实际上,符合您的场景。你是怎么尝试的?是的,我现在明白了——已经注意到了。变得更聪明…所以
      :[^:::
      说一个
      ,然后说除了
      以外的任何字符多次?是的。不要忘记$anchor。此外,请检查anubhava的答案,该答案可能对您更为合适(除非您需要更多的东西来检查输入,这确实需要正则表达式)。当您使用awk时,最好利用所有的awk优点:)当您使用awk时,最好利用所有的awk优点:)