PHP Regex-忽略字符串开头的4个或更多空格


PHP Regex - ignore exactly 4 or more spaces at the beginning of a string?

我有以下正则表达式规则:

'/((f|ht)tp)(.*?)(.gif|.png|.jpg|.jpeg)/'

它工作得很好,但我不希望它与任何前面有换行符和4个或更多空格的内容相匹配,这意味着:

"'n    "

如何做到这一点?

您不需要在前瞻中包含换行符本身,只需在多行模式中使用起始锚(^)即可。此外,由于's可以匹配所有类型的空白,包括换行符和制表符,因此最好使用文字空间字符:

'/^(?! {4}).*(f|ht)tp(.*?)(.gif|.png|.jpg|.jpeg)/m'

说到选项卡,它们可以代替SO上的四个空格来创建代码块,所以您可能也需要考虑这一点:

'/^(?! {4}|'t).*(f|ht)tp(.*?)(.gif|.png|.jpg|.jpeg)/m'

最后,如果希望regex只匹配URL(如consume中所示),则可以使用match-start-reset运算符'K。它的作用就像一个积极的后备,没有固定的长度限制:

'/^(?! {4}|'t).*?'K(f|ht)tp(.*?)(.gif|.png|.jpg|.jpeg)/m'

我在行首添加了一个负前瞻。它检查是否存在一个换行符,后面跟着4个或更多的空白字符。如果存在这种情况,匹配将失败。

'/^(?!'n's{4,}).*((f|ht)tp)(.*?)(.gif|.png|.jpg|.jpeg)/'