Регулярное выражение в Java - PullRequest
1 голос
/ 12 марта 2011

Мне нужно регулярное выражение, которое принимает в качестве входных буквенно-цифровых символов с последующим косой чертой, а затем снова буквенно-цифровым. Может кто-нибудь помочь мне, как написать регулярное выражение на Java для этого?

Пример этого следующий:

adc9/fer4

Я пытался использовать регулярное выражение следующим образом:
Строка s = abc9 / ferg5;
Шаблон строки = "^ [a-zA-Z0-9 _] + / [a-zA-z0-9 _] * $";
если (s.matches (шаблон)) { вернуть истину; }


Но проблема в том, что он принимает все строки формы abc9 / без проверки после косой черты.
Может ли кто-нибудь помочь мне решить эту проблему?

Ответы [ 5 ]

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

Ссылка: http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html

Pattern p = Pattern.compile("[a-z\\d]+/[a-z\\d]+", CASE_INSENSITIVE);

Надеюсь, это поможет.

0 голосов
/ 14 марта 2011

Я думаю, что самое короткое регулярное выражение Java, которое будет делать то, что, я думаю, вы хотите, это "^\\w+/\\w+$".

0 голосов
/ 12 марта 2011

Звездочка должна быть плюсом.В регулярном выражении звездочка означает 0 или более;плюс означает 1 или более.Вы использовали плюс после части перед косой чертой.Вы также должны использовать плюс для части после косой черты.

0 голосов
/ 12 марта 2011

Это код Java, необходимый для эмуляции значения \w:

public final static String
    identifier_chars = "\\pL"          /* all Letters      */
                     + "\\pM"          /* all Marks        */
                     + "\\p{Nd}"       /* Decimal Number   */
                     + "\\p{Nl}"       /* Letter Number    */
                     + "\\p{Pc}"       /* Connector Punctuation           */
                     + "["             /*    or else chars which are both */
                     +     "\\p{InEnclosedAlphanumerics}"
                     +   "&&"          /*    and also      */
                     +     "\\p{So}"   /* Other Symbol     */
                     + "]";

public final static String
identifier_charclass     = "["  + identifier_chars + "]";       /* \w */

public final static String
not_identifier_charclass = "[^" + identifier_chars + "]";       /* \W */

Теперь используйте identifier_charclass в шаблоне, где вы хотите один \w символ, и not_identifier_charclass, где вы хотите один \W символ. Это не совсем соответствует стандарту, но это намного лучше, чем неправильные определения Java для них.

0 голосов
/ 12 марта 2011

Я бы использовал:

String raw = "adc9/fer4";
String part1 = raw.replaceAll("([a-zA-Z0-9]+)/[a-zA-Z0-9]+","$1");
String part2 = raw.replaceAll("[a-zA-Z0-9]+/([a-zA-Z0-9]+)","$1");

[a-zA-Z0-9] разрешает любую буквенно-цифровую строку + это один или несколько ([a-zA-Z0-9] +) означает сохранение значения группы $ 1 означает отзыв первой группы

...