Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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 正在提取两个关键字或一个关键字之间的文本,并且\n_Regex - Fatal编程技术网

Regex 正在提取两个关键字或一个关键字之间的文本,并且\n

Regex 正在提取两个关键字或一个关键字之间的文本,并且\n,regex,Regex,我有一组行,其中大多数都遵循这种格式 STARTKEYWORD some text I want to extract ENDKEYWORD\n 我想找到这些行并从中提取信息 请注意,关键字之间的文本可以包含多种字符(拉丁和非拉丁字母、数字、空格、特殊字符),但\n除外 ENDKEYWORD是可选的,有时可以省略 我的尝试是围绕这个正则表达式 STARTKEYWORD (.+)(?:\n| ENDKEYWORD) 但是,捕获组(.+)会消耗尽可能多的字符,并使用我不需要的ENDKEYWORD

我有一组行,其中大多数都遵循这种格式

STARTKEYWORD some text I want to extract ENDKEYWORD\n
我想找到这些行并从中提取信息

请注意,关键字之间的文本可以包含多种字符(拉丁和非拉丁字母、数字、空格、特殊字符),但
\n
除外

ENDKEYWORD
是可选的,有时可以省略

我的尝试是围绕这个正则表达式

STARTKEYWORD (.+)(?:\n| ENDKEYWORD)
但是,捕获组
(.+)
会消耗尽可能多的字符,并使用我不需要的
ENDKEYWORD

有没有办法只使用正则表达式来获取一些我想提取的文本?

你可以通过添加
和添加
$
而不是
\n
来提高效率,从而使(++)不贪婪(默认情况下是贪婪的,会吃掉任何阻碍它的东西)

STARTKEYWORD (.+?)(?:$| ENDKEYWORD$)
如果您特别想要
\n
,可以使用:

STARTKEYWORD (.+?)(?:\n| ENDKEYWORD\n)

请参见

您可以使用基于前瞻的正则表达式。最好使用
$
行尾定位符,因为最后一行不包含换行符

STARTKEYWORD (.+?)(?= ENDKEYWORD|$)


为'STARTKEYWORD'提供误报我想提取的一些文本在这里?它起作用了。OP只想在包含ENDKEYWORD字符串的情况下将文本提取到
ENDKEYWORD
,否则他想捕获整行。“误报”。。。它匹配的不仅仅是ENDKEYWORD…:)@AvinashRaj虽然在我当前的设置中不可能获得这样的字符串,但处理它们也很好。@AvinashRaj我的意思是,如果正则表达式匹配
STARTKEYWORD
ENDKEYWORD\n
\n
之间的所有文本,那就太好了。您也可以使用
STARTKEYWORD(+?)(?:ENDKEYWORD)?$
STARTKEYWORD (.+?)(?: ENDKEYWORD|$)