Получать данные в двух квадратных скобках в Java из цифрового сертификата? - PullRequest
1 голос
/ 18 марта 2011
Pattern patronValidity = Pattern.compile("Validity: \\[(.*?)\\]");
            Matcher matcherValidity = patronValidity.matcher(strCert);
            if(matcherValidity.find()){
                System.out.println(matcherValidity.group(1));
            }

Я использую это для сканирования файла, но он не возвращает совпадений.Как ни странно, следующий действительно что-то возвращает, но это неправильно, так как левая скобка остается в информации.

Pattern patronValidity = Pattern.compile("Validity: (\\[[^]]*)");
            Matcher matcherValidity = patronValidity.matcher(strCert);
            if(matcherValidity.find()){
                System.out.println(matcherValidity.group(1));
            }

Это значение, которое я пытаюсь найти.это как в файле:

Validity: [From: Thu Aug 21 10:22:08 CDT 2008,
               To: Sat Aug 21 10:22:08 CDT 2010]

Для этого, как в выходных данных второй функции:

[From: Thu Aug 21 10:22:08 CDT 2008,
               To: Sat Aug 21 10:22:08 CDT 2010

Первая функция ничего не соответствует.

Ответы [ 3 ]

4 голосов
/ 18 марта 2011

Вот, пожалуйста:

Pattern patronValidity = Pattern.compile("\\[([^\\]]+)]");

Это должно дать вам то, что вам нужно!

1 голос
/ 18 марта 2011

Должно ли это быть регулярное выражение?Я, вероятно, просто использовал бы подстроку для задачи такого рода.

String str = "Validity: [From: Thu Aug 21 10:22:08 CDT 2008,
               To: Sat Aug 21 10:22:08 CDT 2010]";
System.out.println(str.substring(
                     str.indexOf('[', str.indexOf("Validity: ")),
                     str.indexOf(']')+1)
                  );

Это должно дать желаемый результат и будет намного легче читать, обновлять, изменять или расширять.Также я не уверен, сколько памяти regex использует в Java, но для PHP они рекомендуют встроенные строковые функции для такого рода работы, так как механизм regex намного тяжелее в системе, а также медленнее.*

1 голос
/ 18 марта 2011

Причина, по которой ваше первое выражение не работает, состоит в том, что . соответствует всему , но символам новой строки (и, возможно, другим). Вам нужно скомпилировать свое регулярное выражение с установленным флагом DOTALL, чтобы он соответствовал всем символам. Во-вторых, см. Ответ Джоша.

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