正则表达式:为什么要用逗号作为分隔符字符串的开头?

4
我在阅读关于如何在MongoDB中建模树形结构的文章时,发现了这篇文章,其中演示了逗号分隔路径字符串。在例子中,字符串以逗号开头,我想知道与列表中每个项目后面只有一个逗号相比,这样做是否有理由或好处?
我将此帖标记为特定于RegEx的原因是,在Java中,我不希望在开头加上逗号,因为我会使用以下代码将字符串解析为数组... String[] array = string.split(","); ...而在PHP中,我会使用... $array = explode(",", $string); 在这两种情况下,以逗号开头的字符串将导致$array[0]为空字符串。
提前感谢!
3个回答

2

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


如果第一项是 SomeTopic, ...,则此操作将失败,如果有 C 为任意字符的 CSomeTopic,则此操作将通过。使用正则表达式,您只需要指定开头 ^,然后检查是否有逗号 (?=,),所有这些都可以得到 /^SomeTopic(?=,)/。要在任何地方搜索它,您可以使用 /^SomeTopic(?=,)|(?<=,)SomeTopic(?=,)|(?<=,)SomeTopic(?=$)/ - HamZa
1
@HamZa 那个最后的正则表达式肯定不会使用索引。 - Sammaye
哦,忘了提到平台是否支持环视断言。 - HamZa
我有点激动,但似乎MongoDB使用PCRE,所以应该可以工作。 - HamZa
1
@HamZa 确实,问题出在索引使用上,只有特定的正则表达式在特定方式下使用时才能使用索引。 - Sammaye

2

这个例子没有使用 split 函数,而是涉及到查看字符串中的字符。

"guard" 前导分隔符是为了如果您想在以下内容中找到单个条目 aaa

",zzzaaa,bbb,aaa,zzz"

你可以搜索,aaa,,从而避免如果你搜索aaa,会发生误匹配zzzaaa的情况。


1
在您引用的文章中,这有一个好处,因为正则表达式/,Programming,/被使用。它只是搜索在单词前后都有逗号的单词。如果您省略字符串开头的逗号,则还需要处理此问题,因为RegEx无法找到Programming,

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接