Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在带有正则表达式的行之前删除_Regex_Preg Replace - Fatal编程技术网

Regex 在带有正则表达式的行之前删除

Regex 在带有正则表达式的行之前删除,regex,preg-replace,Regex,Preg Replace,我在PHP中使用preg\u replace删除子字符串前面的文本,如 unnecessary stuff unnecessary stuff DELETE ME and some more stuff This line should be the beginning the rest. 与 我怎样才能删除整行的delete ME 我使用{01000}来限制删除。您可以使用此正则表达式来匹配: /^.{0,1000}DELETE ME[^\r\n]*\R/is 详细信息: [^\r\n

我在PHP中使用
preg\u replace
删除子字符串前面的文本,如

unnecessary stuff
unnecessary stuff
DELETE ME and some more stuff
This line should be the beginning
the rest.

我怎样才能删除整行的
delete ME


我使用
{01000}
来限制删除。

您可以使用此正则表达式来匹配:

/^.{0,1000}DELETE ME[^\r\n]*\R/is

详细信息:

  • [^\r\n]*
    :匹配除
    \r
    \n
  • \R
    :匹配任何unicode行尾字符

您可以使用内联修饰符来控制
匹配的内容:

'~(?s)^.{0,1000}DELETE ME(?-s).*\R?~i'
  ^^^^                   ^^^^^

(?-s)
内联点调用修改器将使字符类之外的所有
与任何字符(包括所有换行符)匹配,并且
(?-s)
将关闭此点调用模式,模式中其右侧的所有
将停止与换行符匹配

见:

内联修饰符
(?s)

在.NET、PCRE(C、PHP、R…)、Perl、Python和Java(但不是Ruby)中,您可以使用内联修饰符
(?s)
,例如在
(?s)BEGIN.*?结束
。有关三个附加功能(在Python中不可用)的详细信息,请参见上一节:在字符串中间打开它,使用
(?-s)
关闭它,或者使用
(?s:foo)
将它仅应用于非捕获组的内容

以及:

✽ 除了在Ruby中,
(?s)
激活“单行模式”,即
DOTALL
模式,允许点匹配换行字符。在Ruby中,
(?m)


另外,使用
\R?
如果
删除我
出现在字符串的最后一行,因为
\R?
匹配1或0个换行符,那么您也将在整个字符串的末尾进行匹配。

使用:
/^.{01000}删除我[^\n]*\n/是不是很好!如果您发布答案,我可以接受它来完成问题。更简单的是,使用内联修饰符并解释字符串的结尾:
/(?s)^。{01000}删除我(?-s)。*\R?/I
您解决了问题。只是一个后续问题。如何限制
DELETE ME
行的长度。例如,仅当行少于100个字符时匹配。如何将`{0100}包含到模式的第二部分中?您可以使用:
/^.{01000}删除我[^\r\n]{0,99}\r/is
愚蠢的我。我试图把
{0100}
放在
*
之后,但忘记了
{0100}
*
:)
'~(?s)^.{0,1000}DELETE ME(?-s).*\R?~i'
  ^^^^                   ^^^^^