【问题标题】:RegEx: Why start a comma-delimited string with a comma?正则表达式:为什么用逗号开始一个逗号分隔的字符串?
【发布时间】:2014-02-22 21:05:00
【问题描述】:

我在阅读how to model tree structures in MongoDB 时遇到了this article,其中说明了一个逗号分隔的路径字符串。在示例中,字符串以逗号开头,我想知道这样做是否有理由或好处,而不是在列表中的每个项目之后仅使用逗号?

我将这篇文章标记为特定于 RegEx 的原因是,在 Java 中,我不想在开头使用逗号,因为我会使用...将字符串解析为数组。

String[] array = string.split(",");

...在 PHP 中我会使用...

$array = explode(",", $string);

在任何一种情况下,以逗号开头的字符串都会导致$array[0] 处为空字符串。

提前致谢!

【问题讨论】:

    标签: regex arrays string mongodb csv


    【解决方案1】:

    该示例没有使用 split 类型函数,而是在执行一些涉及查看字符串中的字符的操作。

    如果您想在以下位置找到单个条目 aaa,则“守卫”前导分隔符是:

    ",zzzaaa,bbb,aaa,zzz"
    

    您可以搜索,aaa,,从而避免在搜索aaa, 时误匹配zzzaaa

    【讨论】:

      【解决方案2】:

      在索引上进行正则表达式比有条件地执行/^[^,]SomeTopic,* 更容易

      【讨论】:

      • 如果第一项是SomeTopic, ...,这将失败,如果有CSomeTopic,其中C 是随机字符,则会通过。使用正则表达式,您只需指定开头^,然后检查是否有逗号(?=,),一并得到/^SomeTopic(?=,)/。要在任何地方搜索它,您可以使用 /^SomeTopic(?=,)|(?<=,)SomeTopic(?=,)|(?<=,)SomeTopic(?=$)/
      • @HamZa 最后一个正则表达式绝对不会使用索引
      • 哦忘了说平台是否支持环视断言。
      • 我有点得意忘形,但似乎 MongoDB uses PCRE 应该可以工作
      • @HamZa 确实问题出在索引使用上,只有特定的正则表达式在以特定方式使用时才能使用索引
      【解决方案3】:

      在您引用的文章中,这有一个好处,因为使用了正则表达式 /,Programming,/。它只是搜索在单词之前 之前有逗号的单词。如果你把字符串开头的逗号去掉,你还需要处理这个问题,因为正则表达式不会找到Programming,

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-20
        • 1970-01-01
        • 1970-01-01
        • 2016-12-03
        • 1970-01-01
        相关资源
        最近更新 更多