Perl正则表达式可匹配(但不包括)可选的最终令牌

杰拉德

我正在尝试有效地匹配行,但不包括可选的结束令牌。

/(.*)(?:$tok)?/

不起作用。结束令牌是可选的,因此是最后一个?,但随后第一个组贪婪地捕获了它。

/(.*?)(?:$tok)?/

也不起作用:第一组匹配零长度的字符串

到目前为止,我能做的最好的事情是

my $tok = 'end';
while (<>) {
    my ($line) = /
       (?|             # 'branch reset'
           (.*)$tok    # either a line terminated with the end token
         |             # or
           (.*)        # the whole line
       )               # end branch reset group
    /x;
    print $line, "\n";
}

这行得通,但令我感到效率低下。正则表达式引擎必须将行解析两次,这是我试图避免的事情。

我知道使用index()可以更好地解决上述问题:

my $i = index($_, $end);
$line = $i < 0 ? $_ : substr $_, 0, $i;

但是我需要对行进行其他处理以使正则表达式令人满意-无论如何,我认为这是一个学习的机会;-)

萨布吉·哈桑(Sabuj Hasan)

请看下面的例子。在这里,它great在匹配项的末尾或line($的末尾寻找单词

my $str = 'alexander the great alex';
if ($str =~ m/(.*?)(?=great|$)/i) {
    print "$1";
}

您可以取代你$tokengreat上面的例子。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

正则表达式匹配大于长度的字符串,但不包括末尾的匹配

来自分类Dev

正则表达式->替换最多但不包括

来自分类Dev

正则表达式-匹配所有内容,但不包括新行的字符序列

来自分类Dev

正则表达式匹配字符串开头但不包括

来自分类Dev

正则表达式开头的精确匹配编号(例如99,但不包括999)

来自分类Dev

正则表达式匹配字符串开头但不包括

来自分类Dev

正则表达式开头的精确匹配编号(例如99,但不包括999)

来自分类常见问题

要匹配的正则表达式模式,不包括... /

来自分类Dev

正则表达式将从完整地址中提取街道,但不包括可选的方向分量

来自分类Dev

Perl正则表达式:与此匹配,但不匹配

来自分类Dev

如何创建一个与Alpha字符最多(但不包括空格)匹配的正则表达式?

来自分类Dev

正则表达式返回方括号之间的字符(但不包括方括号)

来自分类Dev

正则表达式捕获和删除HTML标记,但不包括在引号内

来自分类Dev

使用正则表达式抓取正文,但不包括特定条件

来自分类Dev

使用正则表达式解析SQL,但不包括带引号的文字

来自分类Dev

正则表达式返回方括号之间的字符(但不包括方括号)

来自分类Dev

Java正则表达式查找但不包括在组中

来自分类Dev

拆分数组正则表达式(a但不包括ab,在a之后不丢失char)

来自分类Dev

正则表达式-提取直到匹配,并且不包括该匹配

来自分类Dev

正则表达式可选匹配

来自分类Dev

正则表达式可选匹配

来自分类Dev

C#正则表达式,匹配但不包括匹配字符串之前的第一个字符

来自分类Dev

PERL正则表达式-返回结果不包括条件语句

来自分类Dev

PERL正则表达式-返回结果不包括条件语句

来自分类Dev

在冒号(不包括冒号)之间匹配正则表达式单词

来自分类Dev

匹配冒号之间的正则表达式单词(不包括冒号)

来自分类Dev

匹配正则表达式中不包括关键字的短语

来自分类Dev

正则表达式,不包括特定字符

来自分类Dev

正则表达式,不包括R中的单词

Related 相关文章

  1. 1

    正则表达式匹配大于长度的字符串,但不包括末尾的匹配

  2. 2

    正则表达式->替换最多但不包括

  3. 3

    正则表达式-匹配所有内容,但不包括新行的字符序列

  4. 4

    正则表达式匹配字符串开头但不包括

  5. 5

    正则表达式开头的精确匹配编号(例如99,但不包括999)

  6. 6

    正则表达式匹配字符串开头但不包括

  7. 7

    正则表达式开头的精确匹配编号(例如99,但不包括999)

  8. 8

    要匹配的正则表达式模式,不包括... /

  9. 9

    正则表达式将从完整地址中提取街道,但不包括可选的方向分量

  10. 10

    Perl正则表达式:与此匹配,但不匹配

  11. 11

    如何创建一个与Alpha字符最多(但不包括空格)匹配的正则表达式?

  12. 12

    正则表达式返回方括号之间的字符(但不包括方括号)

  13. 13

    正则表达式捕获和删除HTML标记,但不包括在引号内

  14. 14

    使用正则表达式抓取正文,但不包括特定条件

  15. 15

    使用正则表达式解析SQL,但不包括带引号的文字

  16. 16

    正则表达式返回方括号之间的字符(但不包括方括号)

  17. 17

    Java正则表达式查找但不包括在组中

  18. 18

    拆分数组正则表达式(a但不包括ab,在a之后不丢失char)

  19. 19

    正则表达式-提取直到匹配,并且不包括该匹配

  20. 20

    正则表达式可选匹配

  21. 21

    正则表达式可选匹配

  22. 22

    C#正则表达式,匹配但不包括匹配字符串之前的第一个字符

  23. 23

    PERL正则表达式-返回结果不包括条件语句

  24. 24

    PERL正则表达式-返回结果不包括条件语句

  25. 25

    在冒号(不包括冒号)之间匹配正则表达式单词

  26. 26

    匹配冒号之间的正则表达式单词(不包括冒号)

  27. 27

    匹配正则表达式中不包括关键字的短语

  28. 28

    正则表达式,不包括特定字符

  29. 29

    正则表达式,不包括R中的单词

热门标签

归档