#java #regex
#java #регулярное выражение
Вопрос:
Я ищу выражение reg, которое имеет точно такое же значение, что и оператор «*» в командной строке Linux / Windows. Например, найдите все файлы, которые: начинаются с 0 или более случайных символов, содержат «abc» в середине и заканчиваются 0 или более случайными символами.
Итак, что-то вроде этого в Java:
if (test.match("*abc*"))
System.out.println("found match");
Ответ №1:
Оригинальный ответ:
.*abc.*
Это регулярное выражение, которое решает вашу проблему. Обратите внимание, что если вы хотите сопоставить перевод строки как часть вашей тестовой строки, вам может потребоваться включить однострочный режим.
Пересмотренный ответ, если вы действительно говорите о файлах:
[^/]*abc[^/]*
это лучший ответ, поскольку глобусы фактически не соответствуют каталогам в «*». Например, /etc/*bar будет соответствовать /etc/foobar, но не будет соответствовать / etc /foo /bar. Однако вы сказали, что вас не интересуют имена файлов, поэтому разница может быть для вас несущественной.
Комментарии:
1. Это было в основном то, что я тоже придумал, за исключением того, что я использовал скобки, как упомянула Вивьен; подумал, что спрошу здесь, чтобы убедиться, что я делаю это правильно 🙂
2. @user85116: Ответ изменен, чтобы обсудить глобусы, не соответствующие каталогам, хотя вам может быть все равно.
Ответ №2:
*
в Unix выражается как (.*)
в регулярных выражениях.
if (test.match("(.*)abc(.*)")) { /* ... */ }
Комментарии:
1. Круглые скобки необязательны. Они означают создание соответствующей группы, которая может быть, а может и не быть нужной.
2. Адам, не мог бы ты пояснить свой комментарий немного подробнее?
3. Все, что находится в скобках, фиксирует содержимое, поэтому вы можете в java точно определить, что такое префикс и суффикс abc.
Ответ №3:
Звучит так, как будто вы хотите «глобализировать» нечто большее, чем полное регулярное выражение. Проверьте эту страницу http://download.oracle.com/javase/tutorial/essential/io/find.html
Комментарии:
1. Спасибо Эндрю; Я просто использовал концепцию файла, чтобы объяснить, чего я хотел от * На самом деле я не ищу файлы 🙂