扩展正则表达式换行符

扩展正则表达式换行符

我似乎使用扩展正则表达式匹配了两件事:

  1. 换行。我试过了[ \n],,[ \\n]都不起作用
  2. 字符串“timeout”的负向前瞻。我试过 (?!timeout)

有人能指出正确的方法吗?

答案1

新队

如果你使用 bash,你可以写$'\n'。这将由 shell 而不是程序进行扩展,因此它比其他选项更可靠。

如果您使用破折号(例如,在 shell 脚本中),您始终可以使用文字引用换行符:

'
'

虽然不优雅,但确实有效。

展望

您必须使用 Perl 兼容正则表达式 ( -P),因为扩展正则表达式不支持前瞻。

通常情况下,模仿负面前瞻。

使用 grep 的-v开关通常可以实现这一点:

grep -E 'PATTERN' | grep -vE 'PATTERNtimeout'

相当于

grep -P 'PATTERN(?!timeout)'

要模仿(?!timeout)另一个表达式,可以使用以下子表达式:

(($|[^t])|t($|[^i])|ti($|[^m])|tim($|[^e])|time($|[^o])|timeo($|[^u])|timeou($|[^t]))
  • ($|[^t])字符串在此处结束或第一个字符不是
  • t($|[^i])字符串结束于或第二个字符不是
  • ti($|[^m])字符串结束于或第三个字符不是蒂姆
  • ...

如果以上任何一个匹配,则字符串不是暂停

相关内容