Regex 满足多个条件的正则表达式

Regex 满足多个条件的正则表达式,regex,Regex,我需要用flavor PCRE生成一个正则表达式。它必须是一个正则表达式我不知道为什么要使用负前瞻,但我想你需要一个正前瞻。这只允许您在前瞻中看到时匹配该行。我会用这样的方法来解决这个问题: ^.*(?=.*(?:\n.*)*<\d+>)\n ^.*(=.*(:\n.*)\n ^锚定与行的开头匹配(与您的一样) *匹配它可以匹配的所有字符。在这种情况下,它匹配整行,因为它必须满足末尾的\n (?=…)执行正向前瞻(确保前面某个位置存在字符串) *(?:\n.*)允许在任意行上使

我需要用flavor PCRE生成一个正则表达式。它必须是一个正则表达式我不知道为什么要使用负前瞻,但我想你需要一个正前瞻。这只允许您在前瞻中看到
时匹配该行。我会用这样的方法来解决这个问题:

^.*(?=.*(?:\n.*)*<\d+>)\n
^.*(=.*(:\n.*)\n
  • ^
    锚定与行的开头匹配(与您的一样)
  • *
    匹配它可以匹配的所有字符。在这种情况下,它匹配整行,因为它必须满足末尾的
    \n
  • (?=…)
    执行正向前瞻(确保前面某个位置存在字符串)
  • *(?:\n.*)
    允许在任意行上使用任意数量的字符
  • 仅匹配尖括号中的一个或多个数字
  • \n
    确保行尾有换行符

我假设文本中可能有多行包含一个或多个括号中的数字,并且这些行本身不匹配

您可以使用以下表达式来匹配感兴趣的行

^(?!.*<\d+>).*\r?\n(?=[\s\S]*?<\d+>)
^(?。*).\r?\n(?=[\s\s]*?)

正则表达式引擎执行以下操作

^           match beginning of line
(?!         begin negative lookahead (prevent matching line with '<12>'
  .*        match 0+ characters other than newlines
   <\d+>    match '<', 1+ digits, '>'
)           end negative lookahead
.*          match 0+ characters other than newlines
\r?\n       match newline optionally preceded by '\r'
(?=         begin positive lookahead
  [\s\S]*?  match 0+ characters (incl. newlines), non-greedily
  <\d+>     match '<', 1+ digits, '>' 
)           end positive lookahead
^匹配行首
(?!开始负前瞻(防止与“”匹配行
.*匹配除换行符以外的0+个字符
匹配''
)结束负前瞻
.*匹配除换行符以外的0+个字符
\r?\n匹配换行符(可选前面加“\r”
(?=开始正向前瞻
[\s\s]*?非贪婪地匹配0+个字符(包括换行符)
匹配''
)结束正向前瞻

如果文件是在使用Windows操作系统时生成的,
'\r'
,则会出现回车符。

您可以重复匹配所有行,包括Unicode换行符序列,而
模式不会出现在行中

\A(?:(?!.*<\d+>).*\R)+

你说“where zz是一个括在[尖括号]中的数字”,但你的例子中有文字
,那么是哪个呢?你真正想说的是,你希望在包含
的第一行之前的每一行完整的内容(无论哪种情况)?你基本上需要这一行的第一个匹配:
“^((!)*$”
使用
PCRE\u DOTALL
PCRE\u MULTILINE
。但之前已经回答过,我会投票以link结束。这能回答你的问题吗?哪个是-用尖括号括起来的数字。是的。我没有花足够的时间从你链接的主题中提取信息,但在较高的层次上,它可能类似。这是act与这里的其他答案相比,我的答案更符合我的描述。遗憾的是,我没有充分描述我所需要的。这是我的疏忽。奇怪的是,一个没有完全满足我的用例要求的答案更好。如果你的问题不清楚,你应该编辑清楚,即使现在你已经选择了一个答案。这要归功于当前和未来的读者。有一点特别重要,那就是你需要修正你的例子来解决@Grismar的评论。这一点对于阅读你的问题的每个人来说都很重要。我之所以没有编辑它,是因为你们都按照提出的方式正确地回答了它。我没有接受Charlie Armstrong的回答wer,因为它没有涵盖以尖括号中的数字开头的情况。但是,我会处理Grismar的评论;我同意你的意见,提高了可读性。嘿,有点挣扎。regex101.com/r/2hO0Tn/1-所以,这几乎就是我想要的。我只是不希望它在第一次看到尖括号中的数字时失败。你可能知道如何调整这个吗?它非常接近。这实际上比这里的其他答案更符合我所描述的。遗憾的是,我没有充分描述我所需要的。这是我的疏忽。奇怪的是,一个没有完全满足我的用例bette的一个要求的答案r、 查理·阿姆斯特朗(Charlie Armstrong)的答案实际上对我的用例更有效,但这只是因为我没有充分描述问题。你的答案和其他答案可能都更好。我对哪一个在性能方面更好没有足够的了解,所以我只是继续标记一个似乎匹配的。@aaaa当然,你能做广告吗d您必须在链接中保存的示例数据,保存并在注释中共享链接,并指定应该匹配和不应该匹配的内容。-因此,这几乎就是我想要的。我只是不希望它在第一次看到尖括号中的数字时失败。您可能知道如何调整这个吗?它非常接近。@aaaa因此,该模式现在的逻辑是:如果右侧的内容包含
,则匹配整行,后跟一个换行符。右侧的
部分可以作为
[\s\s]出现在任何一行中
匹配包括换行符在内的任何字符。它与最后一行不匹配,因为该行实际上包含
预期的匹配应该是什么?嘿,查理·阿姆斯特朗。奇怪的是,你的答案实际上更适合我的用例。我认为卡里·斯沃夫兰和第四只鸟的答案更符合我对问题的描述m、 但这对我来说是无价的。
\A(?:(?!.*<\d+>).*\R)+
\A(?:(?!.*<\d+>).*\R)+(?=.*<\d+>)