2013-04-08 4 views
-2

Мне нужна помощь по проблеме.Регулярное выражение в строке

Фактически я ищу, чтобы проверить тип изображения по шестнадцатеричному коду.

string JpgHex = "FF-D8-FF-E0-xx-xx-4A-46-49-46-00"; 

Тогда у меня есть условие на

string.StartsWith(pngHex). 

Проблема заключается в том, что «х» символы представлены в моей строке «JpgHex» может быть все, что я хочу.

Мне кажется, мне нужно регулярное выражение, чтобы проверить это, но я не знаю, как!

Большое спасибо!

+6

Можете ли вы более четко определить «все, что я хочу»? Алфавиты? Числа? Пробелы? – gideon

+0

http://www.regular-expressions.info/quickstart.html Прочитайте раздел «Классы символов или наборы символов». Также проверьте «Точечные соответствия (почти) любого персонажа» – Crisfole

+0

Это шестнадцатеричные символы! –

ответ

0

Регулярное выражение поможет вам; Вы можете использовать следующий инструмент, чтобы помочь вам проверить и узнать: -

http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

Я рекомендую вам иметь игру, потому что тогда вы будете учиться!

Чтобы просто соответствовать любой характер вместо х, должно работать: -

«^ FF-D8-FF-E0 -..-..- 4A-46-49- 46-00 $»

в C#, было бы что-то вроде этого: -

var test = "FF-D8-FF-E0-AB-CD-4A-46-49-46-00"; 

var foo = new Regex("^FF-D8-FF-E0-..-..-4A-46-49-46-00$"); 

if (foo.IsMatch(test)) 
{ 
    // Do magic 
} 

Вам нужно будет прочитать на регулярных выражений, чтобы понять некоторые символы, которые не могут выглядеть знакомо, то есть^и $. См. http://www.regular-expressions.info/

+0

Мне это нравится, но var "test" должен начинаться с foo, "test" может быть длиннее foo! –

+0

Это нормально, спасибо человеку –

+0

Если тест длиннее, чем у вас есть, у вас есть несколько вариантов; то есть удалить «$». Вероятно, вы не должны удалить «^», поскольку вы можете столкнуться с неудачным сценарием, где ваш файл «по совпадению» содержит исходную строку поиска – chrisw

1

Как я уже сказал, мне нужно лучше понять, какой шаблон вам нужно сопоставить.

Вот некоторые примеры:

Regex rgx = 
     new Regex(@"^FF-D8-FF-E0-[a-zA-Z0-9]{2}-[a-zA-Z0-9]{2}-4A-46-49-46-00$"); 
rgx.IsMatch(pngHex); // is match will return a bool. 

Я использую [a-zA-Z0-9]{2} для обозначения два экземпляра символа, колпачков или маленький или номер. Таким образом, выше регулярное выражение будет соответствовать:

FF-D8-FF-E0-aa-zZ-4A-46-49-46-00 
FF-D8-FF-E0-11-22-4A-46-49-46-00 
.. etc 
  1. Основываясь на вашей потребности изменить регулярное выражение, соответственно, так что для столиц и цифры только вы смените [A-Z0-9]. {2} обозначает два вхождения.
  2. ^ означает, что строка должна начинаться с FF и $ означает, что строка должна заканчиваться 00.

Допустим, вы хотите, чтобы соответствовать только два числа, так что вы будете использовать \d{2}, все это будет выглядеть следующим образом:

Regex rgx = new Regex(@"^FF-D8-FF-E0-\d{2}-\d{2}-4A-46-49-46-00$"); 
rgx.IsMatch(pngHex); 

Как я знаю, что из этих волшебных персонажей? Простые, есть документы во всем мире.См. Эту страницу MSDN для некоторых основных regex patterns. На этой странице показаны некоторые quantifiers, такие вещи, как , соответствуют одному или нескольким или соответствуют только одному.

Cheat-sheets also come in handy.

1

Я не совсем понимаю, что именно вы хотите сделать, но точка. символ представляет любой символ в Regex.

Поэтому регулярное выражение «^ FF-D8-FF-E0 -..-..- 4A-46-49-46-00», вероятно, сделает трюк. '^' = Начало ввода.

Если вы хотите разрешить только шестнадцатеричные символы, вы можете использовать «^ FF-D8-FF-E0- [0-9A-F] {2} - [0-9A-F] {2} -4A-46 -49-46-00" .

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