繁体   English   中英

PowerShell Regex:捕获多行中两个字符串之间的字符串

[英]PowerShell Regex: Capturing strings between two strings that is on multiple lines

我可能有这样的事情:

FIRST|[some text here] (newline)
[insert text here] (newline)
SECOND|A (newline)

FIRST|[some text here] (newline)
[insert text here] (newline)
SECOND|B (newline)

FIRST|[some text here] (newline)
[insert text here] (newline)
SECOND|A (newline)

FIRST|[some text here] (newline)
[insert text here] (newline)
SECOND|B (newline)

FIRST|[some text here] (newline)
[insert text here] (newline)
SECOND|A (newline)

我只想捕获从FIRSTSECOND|B所有内容,并排除从FIRSTSECOND|A 这篇文章中的顺序只是一个例子,可能与我正在使用的文件有所不同。 方括号中的文本可以是单词,数字,特殊字符等。(换行符)只是在告诉您它在另一行。 我已经尝试过https://regex101.com/r/CwzCyz/2(FIRST FIRST[\\s\\S]+SECOND\\|B ),但这使我从第一个FIRST到最后一个SECOND | B都可以在regex101.com中使用但不是在我的PowerShell ISE应用程序中,这是因为我将风味设置为PCRE(PHP)。

FIRST\\|(?:(?!SECOND\\|[^B])[\\S\\s])*?SECOND\\|B

将不符合FIRST | 与SECOND | A(或任何非B)相关联

https://regex101.com/r/e0CG9B/1

展开式

 FIRST \| 
 (?:
      (?! SECOND \| [^B] )
      [\S\s] 
 )*?
 SECOND \| B

如果需要绝对内部FIRST / SECOND,则必须以其他方式完成:

FIRST\\|(?:(?!(?:FIRST|SECOND)\\|)[\\S\\s])*SECOND\\|B

https://regex101.com/r/qoT8U1/1

如果FIRST在该行的开头,而SECOND|ASECOND|B在该行的开头,则可以匹配以下所有以SECOND\\|[AB]开头的行

^FIRST.*(?:\r?\n(?!SECOND\|[AB]\b).*)\r?\nSECOND\|B\b.*

在部分

  • ^FIRST.*行首
  • (?:非捕获组
    • \\r?\\n(?!SECOND\\|[AB]\\b)匹配换行符,断言不是以SECOND部分开头
    • .*匹配0+次除换行符以外的任何字符
  • )关闭非捕获组
  • \\r?\\n匹配换行符
  • SECOND\\|B\\b.*匹配以SECOND | B开头的行

正则表达式演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM