[英]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)
我只想捕获从FIRST
到SECOND|B
所有内容,并排除从FIRST
到SECOND|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
如果FIRST
在该行的开头,而SECOND|A
或SECOND|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.