2014-01-30 6 views
4

Я читал how to model tree structures in MongoDB и наткнулся на this article, в котором проиллюстрирована строка пути с разделителями-запятыми. В этом примере строка начинается с запятой, и мне было интересно, есть ли причина или польза для этого, если она имеет запятую после каждого элемента в списке?RegEx: Зачем начинать запятую с запятой?

Причины Я пометил этот пост специфичного для регулярного выражения, в Java я не хотел бы запятой в начале, потому что я хотел бы разобрать строку в массив, используя ...

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

. ..и в PHP Я хотел бы использовать ...

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

в любом из этих случаев, начиная строку с запятой приведет к пустой строке на $array[0].

Заранее благодарен!

ответ

2

В примере не используется функция типа split, а она делает что-то, что предполагает просмотр символов в строке.

«Охрана» ведущий разделитель, так что если вы хотите, чтобы найти одну запись aaa в:

",zzzaaa,bbb,aaa,zzz" 

вы можете искать ,aaa, таким образом избежать ложного матч zzzaaa, если вы искали aaa,.

+0

Прекрасно объяснил, спасибо! –

2

Это проще по индексу в регулярное выражении, чем условно делать /^[^,]SomeTopic,*

+0

Это не удастся, если первый элемент «SomeTopic, ...» и пройдет, если есть 'CSomeTopic', где' C' - случайный символ. Используя регулярное выражение, вам нужно только указать начало '^', а затем проверить, есть ли запятая '(? =,)', Все в одном вы получаете '/^SomeTopic (? =,) /'. Чтобы найти его в любом месте, вы можете использовать '/^SomeTopic (? =,) | (? <=,) SomeTopic (? =,) | (? <=,) SomeTopic (? = $) /' – HamZa

+1

@HamZa Это последнее regex определенно не использовал бы индекс – Sammaye

+0

О, забыл упомянуть, поддерживает ли платформа lookaround assertions. – HamZa

1

В вашей ссылочной статье, это имеет преимущество, поскольку регулярное выражение /,Programming,/ используется. Он просто ищет слова, которые имеют запятую перед и после слова. Если вы оставите запятую в начале строки, вам необходимо будет решить эту проблему, потому что Programming, не будет найден RegEx.

Смежные вопросы