为什么这个正则表达式有效?

时间:2012-09-25 06:02:07

标签: php regex

'@^(?<!h2.).*\s*\n@'

和这个

'@^(?<!h2.).*\n@'

请勿使用以下文件

la-la-la

h2. ohoho

abc
def

由字符串

中的file_get_contents()读取

实际上,正则表达式在以下表达式中被调用

TextileThis(preg_replace('@^(?<!h2.).*\s*\n@','',file_get_contents($that_file)));

所以我只想让文件的第一个字符串消失,如果它与^h2\..*\s*$不匹配,但由于我不能说“在php中不匹配那个正则表达式”我必须使用这个'lookbehind'形式。

我应该提到两个正则表达式都有效,但是第一种形式效果很好,而第二种形式我得到的是h2.未经纺织处理的行,并按原样保留。纺织品要求h2.字符串与下面的文本分隔一个间隔,这就是全部,所以我无法理解它为什么留下未解析的以及这些正则表达式如何实际影响该行。

我还检查了我的源文件,但没有尾随空格。

1 个答案:

答案 0 :(得分:2)

我没有解决你的问题,但我试着向你解释这些正则表达式之间的区别

  1. @^(?<!h2.).*\s*\n@

  2. @^(?<!h2.).*\n@

  3. \s是一个空格字符,这意味着它还包含换行符,例如\r\n

    所以 1。也会删除第二个空行,因为\s匹配第一行末尾的换行符,而您的显式\n将在末尾匹配第二排。

    你的第二个表达式只删除第一行,因为\n将在第一行的末尾匹配,而正则表达式将使第二个空行不匹配。

    所以我假设第二个正则表达式的问题是由结果字符串开头的空行产生的。