Конкретное регулярное выражение Java

Как был бы я проверять, что Строковый вход в Java имеет формат:

xxxx-xxxx-xxxx-xxxx

где x является цифрой 0.. 9?

Спасибо!

5
задан hobodave 22 February 2010 в 23:55
поделиться

2 ответа

Да, эта функциональность работает надежно. Бесчисленные системы (включая нашу) используют их в производстве каждый день. СУБД содержит соответствующие меры предосторожности, чтобы никогда не генерировать одно и то же значение дважды.

Есть одно предостережение: Вы можете вставить повторяющиеся значения в столбец, если вы вставляете их явно (если СУБД позволяет явно установить значение столбца autoinc, что большинство). Это может показаться тривиальным, но можно настроить «бомбы замедленного действия», если (случайно) вставить явное значение в столбец autoinc, которое больше, чем текущий идентификатор autoinc.

Это будет работать нормально до тех пор, пока счетчик autoinc не достигнет вставленного значения, затем «boom» (т.е. нарушение ограничения).

Это может произойти, например, при копировании записей из другой базы данных или восстановлении резервной копии. У нас была проблема в наших системах, и теперь, как правило, «ресинхронизировать» счетчики autoinc: После «опасного» обновления, такого как копирование всей базы данных, мы получаем наибольшее значение в использовании для каждого столбца autoinc, и установить счетчик autoinc на значение + 1.

-121--3815120-

Можно попробовать CsvHelper , который является проектом, над которым я работаю. Его цель заключается в том, чтобы сделать чтение и запись CSV-файлов как можно проще, в то же время очень быстро.

Вот несколько способов чтения из CSV-файла.

// By type
var records = csv.GetRecords<MyClass>();
var records = csv.GetRecords( typeof( MyClass ) );

// Dynamic
var records = csv.GetRecords<dynamic>();

// Using anonymous type for the class definition
var anonymousTypeDefinition =
{
    Id = default( int ),
    Name = string.Empty,
    MyClass = new MyClass()
};
var records = csv.GetRecords( anonymousTypeDefinition );
-121--1158188-

Последовательности объекты в Java имеют метод matchs , который может проверять по регулярному выражению:

 myString.matches("^\\d{4}(-\\d{4}){3}$")

Это конкретное выражение проверяет четыре цифры, а затем три раза (дефис и четыре цифры), таким образом представляя требуемый формат.

3
ответ дан 14 December 2019 в 08:49
поделиться

CEDET был интегрирован в Emacs после выпуска 23. Таким образом, вам не нужно компилировать CEDET для своих Emacs, нужно просто включить его. В такой версии Emacs единственное отличие от инструкций по установке от CEDET заключается в том, что вам не нужно загружать cedet.el, и вам нужно включить (семантический режим 1), чтобы сделать то, что раньше делал cedet.el.

-121--4998047-

с использованием grep

 grep "^\w\{4\}\.\w\{4\}\.\w\{4\}\b" file
-121--3879645-

Для начала это отличный источник regexps: http://www.regular-expressions.info . Посетить его, ткнуть и играть вокруг. Далее API java.util. Образец имеет краткий обзор regex узоров.

Вернемся к вашему вопросу: вы хотите сопоставить четыре последовательные группы из четырех цифр, разделенных дефисом. Одна группа из 4 цифр может быть представлена как

\d{4}

Четыре цифры, разделенные дефисом, могут быть представлены как:

\d{4}-\d{4}-\d{4}-\d{4}

Чтобы сделать его короче, можно также представить одну группу из четырех цифр и три последовательные группы из четырех цифр с префиксом дефиса:

\d{4}(-\d{4}){3}

Теперь в Java можно использовать Последовательности # matchs () для проверки соответствия последовательности заданному regex.

boolean matches = value.matches("\\d{4}(-\\d{4}){3}");

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

4
ответ дан 14 December 2019 в 08:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: