Есть большая разница.Давайте проверим оба выражения в строке aa / bbb / cccc / ddd / -eeeee .Первая
^([a-z][a-z])/(.*?)(-.*)?$
приведет к трем группам совпадений
1: (aa)
2: (bbb/cccc/ddd/)
3: (-eeeee)
, а вторая ^([a-z][a-z])/([^/]+)(-.*)?$
не будет ничего совпадать.
Ключ в том, что впервое выражение, которое у вас есть (.*?)(-.*)?
, что означает, что первая группа - это что угодно, пока не будет найдено - .Если - соответствует, тогда начните третью группу.
Во втором выражении у вас есть ([^/]+)(-.*)?
, т. Е. Поместить все до / во вторую группу, а затем, если сопоставлено - , создать третью группу,Проблема в том, что не совпадает / и начинается новая группа с - .
Если вы проверите второе выражение на двух строках aa / bbb- / eeeee и aa / bbb / -eeeee , вы увидите, что будет получена только первая строкав любых матчах
1: (aa)
2: (bbb)
3: (-/eeeee)
и второго не будет.
Надеюсь, это помогло.
Примечание: все упомянутые тесты я провел на www.RegexTester.com .