не жадный поиск избыточных значений в строке - PullRequest
1 голос
/ 20 марта 2019

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

/mPastedImg_Time1469244713469.png&gtxResourceFileName=mPastedImg_Time1469244713469.png&amp

У меня есть этот код регулярного выражения, но, похоже, он не работает.

[^\/]*?_Time[0-9]{13}\.\w{3,4}\&

Мой ожидаемый результат:

mPastedImg_Time1469244713469.png

Но фактический результат равен:

mPastedImg_Time1469244713469.png&gtxResourceFileName=mPastedImg_Time1469244713469.png&

Ответы [ 3 ]

2 голосов
/ 20 марта 2019

Чтобы найти уникальное имя файла в строке, вы можете использовать это регулярное выражение,

([^\/&= ]+_Time[0-9]{13}\.\w{3,4})(?!.*\1)

Здесь ([^\/&= ]+_Time[0-9]{13}\.\w{3,4}) захватывает требуемое имя файла, а (?!.*\1) при отрицательном просмотре дает вам последнее совпадение, гарантирующее удаление всех дубликатов совпадений в строке. Кроме того, из-за соответствующего отрицательного набора символов, он также позволяет сопоставлять набор символов китайского языка, который присутствует в вашем имени файла, который также вы хотите захватить.

Демо

1 голос
/ 20 марта 2019

В вашем шаблоне есть 2 совпадения, в которых вторая часть имеет большее совпадение из-за отрицательного класса символов [^\/], который не соответствует косой черте.

Что вы можете сделать, это сделать первый класс символов более строгим, чтобы указать, что вы хотите сопоставить (например, [a-zA-Z]), и убедиться, что вы не используете глобальное совпадение для сопоставления всем, а только одно совпадение :

[a-zA-Z]*_Time[0-9]{13}\.\w{3,4}

Regex demo

Обратите внимание, что вам не нужно сопоставлять амперсанд в конце шаблона.

0 голосов
/ 20 марта 2019

Я думаю, что вы достаточно близко соответствовали этому, но вы делали слишком сложные:

Если вы знаете, что имя будет mPastedImg_Time, используйте его в полной мере.

Как насчет того, чтобы просто сделать это так:

mPastedImg_Time[0-9]{13}\.\w{3,4}

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