2014-09-21 4 views
0

Мне нужно построить регулярное выражение, чтобы оно не допускало / в начале или в конце и не должно быть более одного / в последовательности.Регулярное выражение, которое позволяет использовать только одиночные разделители между словами

Valid Expression is: AB/CD 
Valid Expression :AB 
Invalid Expression: //AB//CD// 
Invalid Expression: /////// 
Invalid Expression: AB//////// 

/ персонаж просто разделитель между двумя словами. Его длина не должна быть больше одного слова.

+0

Какие типы символов допустимы между косой черты? Кроме того, является ли 'AB' действительным совпадением? –

ответ

0

Предполагая, что вы только хотите, чтобы алфавитно-цифровые символы (включая подчеркивание) между косой черты, это довольно тривиально:

boolean foundMatch = subject.matches("\\w+(?:/\\w+)*"); 

Объяснение:

\w+ # Match one or more alnum characters 
(?: # Start a non-capturing group 
/ # Match a single slash 
\w+ # Match one or more alnum characters 
)* # Match that group any number of times 
0
[a-zA-Z]+(/[a-zA-Z]+)+ 

Это соответствует

a/b 
a/b/c 
aa/vv/cc 

не соответствует

a 
/a/b 
a//b 
a/b/ 

Demo

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Reg { 
    public static void main(String[] args) { 
    Pattern pattern = Pattern.compile("[a-zA-Z]+(/[a-zA-Z]+)+"); 
    Matcher matcher = pattern.matcher("a/b/c"); 
    System.out.println(matcher.matches()); 
    } 
} 
+0

Здесь перечислены несколько ненужных круглых скобок, и вы должны использовать '.matches()' вместо '.find()' для проверки, или подстроки также будут сопоставляться. –

+0

Как насчет 'abc' или' a/b/c'? – Henry

+0

@Henry спасибо, я обновил свой ответ – sol4me

0

Это регулярное выражение делает это:

^(?!/)(?!.*//).*[^/]$ 

Так в Java:

if (str.matches("(?!/)(?!.*//).*[^/]")) 

Заметим, что^и $ вытекают из matches(), потому что матчи должны соответствовать все строку , чтобы быть правдой.

Смежные вопросы