为什么你必须在正则表达式中提到开头和结尾字符



问题是不包含字母PART的正则表达式。这是一个答案:/^((?!部分(.(*$/

问题链接:如何匹配不包含单词的行

我的问题是,为什么除非您指出 start(^( 和 end($(,否则它不起作用?为什么不仅(?!部分(.(*工作?

模式

/^((?!PART).)*$/

匹配一般模式^.*$,即在开始锚点和结束锚点之间发生的任何内容。 但是,它还包含一个否定断言(?!PART)。 如前所述,您的模式断言,在字符串中的每个位置,在向前查找四个字符时,字符串PART不会出现。

如果您只使用此模式:

/((?!PART).)*/

那么它只意味着PART不会发生在字符串中的任何某个点。 但如本演示所示,像 PART hello world 这样的字符串将匹配这种替代模式,并且可能不是您想要的。

因为如果没有"多行"标志,"线"的概念就没有任何意义re.M。此外,如果您只匹配包含 PART 的行的部分,那么您的所有匹配也将是字符串"PART"或在上面的示例中"PART"+ 整个剩余行(取决于标志(。

^ = 行首 $ = 行尾 re.S = DOTALL,点包括空格/行尾标记 re.M = 多行不将行尾视为匹配结束

如果不明确说明,您只是在进行子字符串匹配并完全忽略行尾。

相关内容

最新更新