Соответствие шаблону строки в Java - PullRequest
17 голосов
/ 29 октября 2011

Я хочу найти заданный строковый шаблон в строке ввода.

Например,

String URL = "https://localhost:8080/sbs/01.00/sip/dreamworks/v/01.00/cui/print/$fwVer/{$fwVer}/$lang/en/$model/{$model}/$region/us/$imageBg/{$imageBg}/$imageH/{$imageH}/$imageSz/{$imageSz}/$imageW/{$imageW}/movie/Kung_Fu_Panda_two/categories/3D_Pix/item/{item}/_back/2?$uniqueID={$uniqueID}"

Теперь мне нужно найти, содержит ли строка URL «/{item}/». Пожалуйста, помогите мне.

Это пример. На самом деле мне нужно проверить, содержит ли URL строку, совпадающую с "/ {a-zA-Z0-9} /"

Ответы [ 4 ]

35 голосов
/ 29 октября 2011

Вы можете использовать класс Pattern для этого.Если вы хотите сопоставлять только символы слова внутри {}, вы можете использовать следующее регулярное выражение.\w является сокращением для [a-zA-Z0-9_].Если вы в порядке с _, тогда используйте \w или используйте [a-zA-Z0-9].

String URL = "https://localhost:8080/sbs/01.00/sip/dreamworks/v/01.00/cui/print/$fwVer/{$fwVer}/$lang/en/$model/{$model}/$region/us/$imageBg/{$imageBg}/$imageH/{$imageH}/$imageSz/{$imageSz}/$imageW/{$imageW}/movie/Kung_Fu_Panda_two/categories/3D_Pix/item/{item}/_back/2?$uniqueID={$uniqueID}";
Pattern pattern = Pattern.compile("/\\{\\w+\\}/");
Matcher matcher = pattern.matcher(URL);
if (matcher.find()) {
    System.out.println(matcher.group(0)); //prints /{item}/
} else {
    System.out.println("Match not found");
}
14 голосов
/ 29 октября 2011

Это всего лишь вопрос String.contains:

if (input.contains("{item}"))

Если вам нужно знать , где это происходит, вы можете использовать indexOf:

int index = input.indexOf("{item}");
if (index != -1) // -1 means "not found"
{
    ...
}

Это хорошо для сопоставления точных строк - если вам нужны реальные шаблоны (например, «три цифры, за которыми следуют не более 2 букв AC»), то вам следует посмотретьв регулярные выражения .

РЕДАКТИРОВАТЬ: Хорошо, звучит так, как вы do хотите регулярные выражения.Вы можете захотеть что-то вроде этого:

private static final Pattern URL_PATTERN =
    Pattern.compile("/\\{[a-zA-Z0-9]+\\}/");

...

if (URL_PATTERN.matches(input).find())
3 голосов
/ 02 марта 2012

Если вы хотите проверить, присутствует ли какая-либо строка в другой строке, используйте что-то вроде String.contains

Если вы хотите проверить, присутствует ли в строке какой-либо шаблон , добавьтеи добавьте шаблон с помощью «. *».Результат будет принимать строки, содержащие шаблон.

Пример: Предположим, у вас есть некоторое регулярное выражение a (b | c) , которое проверяет, соответствует ли строка ab или ac
.*(a(b|c)).* проверит, содержит ли строка ab или ac.

Недостатком этого метода является то, что он не даст вам местоположение совпадения.

2 голосов
/ 29 октября 2011

Вы можете сделать это, используя string.indexOf("{item}"). Если результат больше -1 {item} в строке

...