preg_match仅返回第一个匹配项

雅各布·德夫

我已经写了一个正则表达式,可以解析给定的内容并返回一个匹配数组。preg_match功能如下:

<?php preg_match("/\[tab *title=(\”|\"|\’|\'|).*(\”|\"|\’|\'|)\]/i", $content, $tabs); ?>

根据RegExr,这可以很好地匹配以下任何(或变体)形式

[tab title="example"]
[tab  title="example"]
[tab title='example']
[tab title=example]
[TAB TITLE="example"]
[tab title=”example”]
[tab title=’example’]

我可以让我的preg_match返回一个数组,但它只显示第一个匹配项:

Array
(
    [0] => [tab title=’Admission’]
    [1] => 
    [2] => 
)

我是regex的新手,这是我第一次尝试自己做。我确定我缺少明显的东西。为什么此数组仅显示第一个匹配项?

我尝试解析的示例数据如下:

[tab-group]

[tab title='Admission']

Tab Content Here

[/tab]

[tab title="Amenities"]

Tab Content Here

[/tab]

[tab title="Season Passes"]

Tab Content Here

[/tab]

[tab title="Hours"]

Tab Content Here

[/tab]

[/tab-group]

更新:我刚刚发现preg_match_all,这似乎正确匹配,除了出于某种原因在末尾添加两个额外的数组:

Array
(
    [0] => Array
        (
            [0] => [tab title=’Admission’]
            [1] => [tab title=”Amenities”]
            [2] => [tab title=”Season Passes”]
            [3] => [tab title=”Hours”]
        )

    [1] => Array
        (
            [0] => 
            [1] => 
            [2] => 
            [3] => 
        )

    [2] => Array
        (
            [0] => 
            [1] => 
            [2] => 
            [3] => 
        )

)

从我的样本数据中,很清楚为什么要添加这些数组吗?

巴尔玛

当您在正则表达式中使用括号时,它们有两个作用:它们可用于对表达式的各个部分进行分组,并且还使与该组匹配的字符串部分被“捕获”并在匹配数据中返回。这些额外的数组是捕获的字符串。您可以通过?:在开头放置一个使群组不被捕获

(?:\”|\"|\’|\'|)

但是在您的正则表达式中,您根本不需要组,可以在方括号中使用字符集:

preg_match_all("/\[tab *title=[”\"’']?.*[”\"’']?\]/i", $content, $tabs);

放在?字符集之后使其成为可选字符,因此它也将与空字符串匹配,就像组中的最后一个替代字符一样。

但是在周围有一个可选字符并没有多大意义.*它将与以下内容匹配title=.*

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

HtmlAgilityPack仅返回第一个匹配项

来自分类Dev

Ruby str.match(regex)返回仅包含第一个匹配项的MatchData

来自分类Dev

preg_match所有第一个匹配项,并在文件中获得两个匹配项

来自分类Dev

PyQuery-attr match仅返回第一个匹配项,而不是所有匹配项

来自分类Dev

Preg_replace仅替换第一个匹配项

来自分类Dev

使用preg_replace仅替换第一个匹配项

来自分类Dev

仅子查询第一个匹配项

来自分类Dev

仅删除sed的第一个匹配项

来自分类Dev

NSPredicate仅查找第一个匹配项

来自分类Dev

仅打印第一个匹配项

来自分类Dev

正则表达式仅返回第一个匹配项

来自分类Dev

Python re.findall仅返回第一个匹配项

来自分类Dev

preg_match_all仅返回一个匹配项

来自分类Dev

仅当存在匹配项时才返回true,但不是第一个匹配项

来自分类Dev

preg_match_all仅返回索引为0的第一个数组,而不返回索引为1的第一个数组

来自分类Dev

如果第一个字符为斜杠,则为preg_match

来自分类Dev

如何获得我的preg_match以显示第一个实例?

来自分类Dev

RegExp#match仅返回一个匹配项

来自分类Dev

使用“ sed”仅替换第一个和最后一个匹配项

来自分类Dev

C#中的正则表达式仅返回第一个匹配项

来自分类Dev

C#中的正则表达式仅返回第一个匹配项

来自分类Dev

别名选择器不起作用的SQL IN运算符仅返回第一个匹配项

来自分类Dev

仅匹配正则表达式行中的第一个匹配项

来自分类Dev

AWK仅匹配多行文本中的行的第一个匹配项

来自分类Dev

如何在PHP中使用Preg Match获得第一个可能的匹配

来自分类Dev

preg_match仅匹配单个匹配项

来自分类Dev

正则表达式PHP仅获得第一个匹配项

来自分类Dev

如何仅使用.Net Regex.Replace替换第一个匹配项

来自分类Dev

C#RegEx-仅获得字符串中的第一个匹配项

Related 相关文章

  1. 1

    HtmlAgilityPack仅返回第一个匹配项

  2. 2

    Ruby str.match(regex)返回仅包含第一个匹配项的MatchData

  3. 3

    preg_match所有第一个匹配项,并在文件中获得两个匹配项

  4. 4

    PyQuery-attr match仅返回第一个匹配项,而不是所有匹配项

  5. 5

    Preg_replace仅替换第一个匹配项

  6. 6

    使用preg_replace仅替换第一个匹配项

  7. 7

    仅子查询第一个匹配项

  8. 8

    仅删除sed的第一个匹配项

  9. 9

    NSPredicate仅查找第一个匹配项

  10. 10

    仅打印第一个匹配项

  11. 11

    正则表达式仅返回第一个匹配项

  12. 12

    Python re.findall仅返回第一个匹配项

  13. 13

    preg_match_all仅返回一个匹配项

  14. 14

    仅当存在匹配项时才返回true,但不是第一个匹配项

  15. 15

    preg_match_all仅返回索引为0的第一个数组,而不返回索引为1的第一个数组

  16. 16

    如果第一个字符为斜杠,则为preg_match

  17. 17

    如何获得我的preg_match以显示第一个实例?

  18. 18

    RegExp#match仅返回一个匹配项

  19. 19

    使用“ sed”仅替换第一个和最后一个匹配项

  20. 20

    C#中的正则表达式仅返回第一个匹配项

  21. 21

    C#中的正则表达式仅返回第一个匹配项

  22. 22

    别名选择器不起作用的SQL IN运算符仅返回第一个匹配项

  23. 23

    仅匹配正则表达式行中的第一个匹配项

  24. 24

    AWK仅匹配多行文本中的行的第一个匹配项

  25. 25

    如何在PHP中使用Preg Match获得第一个可能的匹配

  26. 26

    preg_match仅匹配单个匹配项

  27. 27

    正则表达式PHP仅获得第一个匹配项

  28. 28

    如何仅使用.Net Regex.Replace替换第一个匹配项

  29. 29

    C#RegEx-仅获得字符串中的第一个匹配项

热门标签

归档