Уменьшить сложность относительного / канонического пути? (Как исключить ".."?) - PullRequest
0 голосов
/ 09 ноября 2011

Я пытаюсь в основном пытаться преобразовать "dir1/dir2/../dir3" в "dir1/dir3", используя регулярное выражение следующим образом:

filePath.replaceAll("^(\\w)?(<>:\"/\\|?*)//\\.\\./", "");

Что я здесь не так делаю?

Я знаю,Есть много правил нормализации, но я только хочу применить два правила:

All "." segments are removed.

If a ".." segment is preceded by a non-".." segment then both of these segments are removed. This step is repeated until it is no longer applicable.

Я также попробовал:

result = filePath.replace("^(\\w+)\\.\\./", "");

, но это тоже не сработало

1 Ответ

3 голосов
/ 09 ноября 2011

вы не можете использовать регулярные выражения для этого (да, простые случаи, такие как ваш пример, могут работать, но быстро сломаются для более сложных шаблонов). Поскольку вы используете Java, взгляните на java.net.URI.normalize():

Нормализует путь этого URI ... Если сегменту ".." предшествует сегмент, отличный от "..", то оба этих сегмента удаляются. Этот шаг повторяется, пока он больше не применяется. ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...