regexp使用逗号分隔符来分隔字符串,但是忽略逗号是否用大括号{,}

奥古占

我需要一个正则表达式使用逗号(,)分隔符来分割字符串,但是在下面的示例中忽略逗号是否用大括号{,}括起来;

"asd", domain={"id"="test"}, names={"index"="user.all", "show"="user.view"}, test="test"

进入(应该如此)

"asd"
domain={"id"="test"}
names={"index"="user.all", "show"="user.view"}
test="test"

问题:(不是这样)

"asd"
domain={"id"="test"}
names={"index"="user.all"
"show"="user.view"}
test="test"

尝试过此操作,但它也将大括号{,}中的逗号分隔

\{[^}]*}|[^,]+

但是我完全不知道最终应该如何解决。任何帮助都将被申请!

卡西米尔和希波吕特

我看到了可能性(不会因长字符串而崩溃)

第一个preg_match_all

$pattern = '~
(?:
    \G(?!\A), # contigous to the previous match, not at the start of the string
  |           # OR
    \A ,??    # at the start of the string or after the first match when
              # it is empty
)\K           # discard characters on the left from match result
[^{,]*+       # all that is not a { or a ,
(?:
    {[^}]*}? [^{,]* # a string enclosed between curly brackets until a , or a {
                    # or an unclosed opening curly bracket until the end
)*+
~sx';

if (preg_match_all($pattern, $str, $m))
    print_r($m[0]);

第二个withpreg_split和backtracking控制动词可避免将部分括在大括号之间(较短的字符串,但对于长字符串而言效率较低)

$pattern = '~{[^}]*}?(*SKIP)(*F)|,~';
print_r(preg_split($pattern, $str));

(*F)强制模式失败,并(*SKIP)强制正则表达式引擎跳过模式失败时已经匹配的部分。

最后一种方法的缺点是模式以交替开始。这意味着对于不是a{或a的每个字符,,将测试交替的两个分支(不作任何选择)但是,您可以使用S(study)修饰符来改善模式

$pattern = '~{[^}]*}?(*SKIP)(*F)|,~S';

或者您也可以不作任何更改地编写它,如下所示:

$pattern = '~[{,](?:(?<={)[^}]*}?(*SKIP)(*F))?~';

通过这种方式,之前使用{或的,位置的搜索算法要比正则表达式引擎的正常遍历更快。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在忽略大括号中的逗号的同时拆分逗号分隔的字符串?

来自分类Dev

用逗号分隔符分隔字符串,但用[]括起来时不分隔

来自分类Dev

拆分字符串,但忽略括号或大括号中的分隔符

来自分类Dev

使用一些逗号分隔符来分割字符串

来自分类Dev

用逗号分隔符拆分包含逗号的字符串

来自分类Dev

用逗号分隔字符串(括号中除外)

来自分类Dev

Javascript:用逗号分隔字符串,括号内除外

来自分类Dev

使用逗号分隔符分隔字符串,但如果使用C#则为货币值则不进行分隔

来自分类Dev

使用逗号分隔符分隔字符串,但如果使用C#则为货币值则不进行分隔

来自分类Dev

从TXT文件到字符串的STR_REPLACE(使用逗号分隔符)

来自分类Dev

如何使用多个逗号“拆分”不用作分隔符的字符串

来自分类Dev

如何使用逗号作为分隔符在特定位置大写字符串?

来自分类Dev

用逗号运算符分隔MySQL字符串

来自分类Dev

用逗号运算符分隔MySQL字符串

来自分类Dev

Java:分割以逗号分隔的字符串,但忽略括号中的逗号

来自分类Dev

用逗号分隔字符串“和”,“或”

来自分类Dev

PHP - 用逗号分隔字符串

来自分类Dev

如何使用 SQL Server 用逗号分隔字符串?

来自分类Dev

如何将包含多个分隔符的字符串合并为用逗号分隔的单个字符串

来自分类Dev

使用CTE逗号分隔的字符串

来自分类Dev

使用CTE逗号分隔的字符串

来自分类Dev

SQL:如何分隔用逗号分隔的字符串值?

来自分类Dev

使用JavaScript分割逗号分隔的字符串,但忽略分号之间的逗号

来自分类Dev

逗号分隔的字符串

来自分类Dev

sqlite按包含逗号分隔符的数字的字符串排序

来自分类Dev

Java中字符串数字的数字逗号分隔符

来自分类Dev

Python:在DataFrame中加载csv文件,但字符串和列表逗号分隔符例外

来自分类Dev

如何在数据框中拆分字符串并将逗号作为分隔符

来自分类Dev

如何仅使用字符串中的第一个逗号作为分隔符?

Related 相关文章

  1. 1

    如何在忽略大括号中的逗号的同时拆分逗号分隔的字符串?

  2. 2

    用逗号分隔符分隔字符串,但用[]括起来时不分隔

  3. 3

    拆分字符串,但忽略括号或大括号中的分隔符

  4. 4

    使用一些逗号分隔符来分割字符串

  5. 5

    用逗号分隔符拆分包含逗号的字符串

  6. 6

    用逗号分隔字符串(括号中除外)

  7. 7

    Javascript:用逗号分隔字符串,括号内除外

  8. 8

    使用逗号分隔符分隔字符串,但如果使用C#则为货币值则不进行分隔

  9. 9

    使用逗号分隔符分隔字符串,但如果使用C#则为货币值则不进行分隔

  10. 10

    从TXT文件到字符串的STR_REPLACE(使用逗号分隔符)

  11. 11

    如何使用多个逗号“拆分”不用作分隔符的字符串

  12. 12

    如何使用逗号作为分隔符在特定位置大写字符串?

  13. 13

    用逗号运算符分隔MySQL字符串

  14. 14

    用逗号运算符分隔MySQL字符串

  15. 15

    Java:分割以逗号分隔的字符串,但忽略括号中的逗号

  16. 16

    用逗号分隔字符串“和”,“或”

  17. 17

    PHP - 用逗号分隔字符串

  18. 18

    如何使用 SQL Server 用逗号分隔字符串?

  19. 19

    如何将包含多个分隔符的字符串合并为用逗号分隔的单个字符串

  20. 20

    使用CTE逗号分隔的字符串

  21. 21

    使用CTE逗号分隔的字符串

  22. 22

    SQL:如何分隔用逗号分隔的字符串值?

  23. 23

    使用JavaScript分割逗号分隔的字符串,但忽略分号之间的逗号

  24. 24

    逗号分隔的字符串

  25. 25

    sqlite按包含逗号分隔符的数字的字符串排序

  26. 26

    Java中字符串数字的数字逗号分隔符

  27. 27

    Python:在DataFrame中加载csv文件,但字符串和列表逗号分隔符例外

  28. 28

    如何在数据框中拆分字符串并将逗号作为分隔符

  29. 29

    如何仅使用字符串中的第一个逗号作为分隔符?

热门标签

归档