2016-01-28 2 views
-5

У меня есть вопрос с регулярным выражением, назначенный моим инструктором, и он хочет, чтобы мы вернули все возвращаемые значения true, изменив строковое значение в трех объявленных переменных. Это мой первый вопрос, связанный с регулярным выражением, и я хотел бы немного помочь, если все в порядке. Я попробовал www.regexpal.com, но я не знал, как его использовать. Может ли кто-то пролить немного света на эту тему о том, как я начинаю это решать? БлагодаряНужна помощь по возвращаемым значениям Regex

Heres следующий код:

public class RegexTester { 

public static void main(String[] args) { 

    String regexSSN = ""; //TODO add a regex for Social Security Numbers 

    String regex9000 = ""; //TODO add a regex for GGC 9000 numbers here 

    String regexZipPlus4 = ""; //TODO add a regex for zip+4 zipcodes here 

    System.out.println("All of the following tests shoule return true, " 
    + "the negative tests are negated (meaning that they should " 
    + "also return true)"); 

    System.out.println("192-192-5555".matches(regexSSN)); // the following tests should all match 
    System.out.println("444-183-1212".matches(regexSSN)); 
    System.out.println("032-431-9375".matches(regexSSN)); 
    System.out.println("122-650-4343".matches(regexSSN)); 
    System.out.println("900".matches(regex9000)); 
    System.out.println("900112389".matches(regex9000)); 
    System.out.println("900".matches(regex9000)); 
    System.out.println("900050000".matches(regex9000)); 
    System.out.println("30043".matches(regexZipPlus4)); 
    System.out.println("30043-1234".matches(regexZipPlus4)); 

    System.out.println(); // the following codes print out true 

    System.out.println(!"192-XYZ-5555".matches(regexSSN)); // the following tests should NOT match 
    System.out.println(!"00-192-5555".matches(regexSSN)); 
    System.out.println(!"90005000".matches(regex9000));  // too short! 
    System.out.println(!"900250000".matches(regex9000));  // must be 9000* or 9001* 
    System.out.println(!"9002500001".matches(regex9000));  // to big 
    System.out.println(!"9001FOO00".matches(regex9000));  // no alpha allowed 
    System.out.println(!"30043-12345".matches(regexZipPlus4)); // too long 
    System.out.println(!"300430-1234".matches(regexZipPlus4)); // too long 
    System.out.println(!"30043-12".matches(regexZipPlus4));  // too short 
    System.out.println(!"300FO-1234".matches(regexZipPlus4)); // no alpha allowed 
    System.out.println(!"30043=1234".matches(regexZipPlus4)); // missing hyphen 


} 

} 
+1

В принципе: можете ли вы сделать домашнее задание? Краткий ответ: ** нет **. – HamZa

+0

Я не пытаюсь заставить людей делать домашнее задание, мне просто нужна помощь в вопросе, потому что я не знаю, как его решить. Возможно, вместо того, чтобы напасть на меня, вы можете указать мне в том направлении, где я могу его решить. – xtremeslice

+0

https://regex101.com/ может быть полезно при разработке строк регулярных выражений – Chris

ответ

0

Публикация с использованием java.util.regex.Pattern documentation. Он содержит всю необходимую информацию для завершения задания. Вы должны четко понимать требования при построении шаблона регулярного выражения. Затем вы можете преобразовать эти требования в регулярное выражение.

Например, чтобы соответствовать номеру телефона в следующем формате XXX-XXX-XXXX, где Х представляет собой любое число, вам нужно 3 цифры с последующей тиром, а затем 3 цифры, а затем другим тиром, а затем 4 цифры:

$\d{3}\-\d{3}\-\d{4}$ 

Обратите внимание, что при назначении этого шаблона строке Java вам необходимо избежать специальных символов.

Мне нравится использовать RegexPlanet для проверки моего кода. Вот ссылка для первой проблемы: regexSSN (хотя ssn должен быть длиной 9 цифр, в вашем коде это 10). Нажмите кнопку «Перейти». Вы сможете ввести свои тестовые примеры.

Вот решение для вашего кулачного дела.

String regexSSN = "^(\\d{3}\\-\\d{3}\\-\\d{4})"; 

Надеюсь, это поможет вам начать работу, чтобы вы могли выполнить другие две проблемы.

+0

Большое спасибо за помощь! Бог благословил. – xtremeslice

0

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

Шаг 1: Мы видим, что формат ###-###-##### где # номер 0-9

Шаг 2: Регулярное выражение для сопоставления номера либо [0-9] или \d

Шаг 3: Теперь мы можем написать это в regex \d\d\d-\d\d\d-\d\d\d\d, где - - это буквальная тире.

Шаг 4: Повторите уведомление? Мы можем позаботиться о том, что тоже с {n} где n это количество времени, мы хотим повторить предыдущий раздел, так что теперь мы имеем \d{3}-\d{3}-\d{4}

И то, как вы делаете SSN Regex.

+0

Спасибо! Я действительно читал свою книгу, и потому, что я использую dr java, мне пришлось переформатировать то, как я написал регулярное выражение (я думаю). Вот что я придумал: \\ d {3} - \\ d {3} - \\ d {4}. его то же самое, что и у вас, но по какой-то причине он не позволит мне скомпилировать, если я не добавлю лишний \. Спасибо за помощь! – xtremeslice