字符串中的正则表达式

问题描述:

我需要一些问题的帮助。字符串中的正则表达式

实际上,我用十六进制代码搜索图像类型。

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

然后我对

string.StartsWith(pngHex). 

条件的问题是,“X”字符,呈现在我的“JpgHex”字符串可以是我想做的事情。

我想我需要一个正则表达式来检查,但我不知道如何!

非常感谢!

+6

你能更清楚地定义“我想要的”吗?字母?数字?空格? – gideon 2013-04-08 14:12:07

+0

http://www.regular-expressions.info/quickstart.html阅读“字符类或字符集”部分。另外检查'点匹配(几乎)任何字符' – Crisfole 2013-04-08 14:14:55

+0

它是十六进制字符! – 2013-04-08 14:15:43

正则表达式会帮助你;您可以使用以下工具来帮助你测试和学习: -

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

我建议你有一出戏,因为那时你将学习!

要简单地匹配到位的任意x字符,下面应该工作: -

“^ 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长! – 2013-04-08 14:22:05

+0

没关系,谢谢你 – 2013-04-08 14:24:33

+0

如果测试比你所匹配的时间长,你有几个选择;即删除'$'。您可能不应删除'^',因为您可能遇到不幸的情况,其中您的文件'巧合'包含初始搜索字符串 – chrisw 2013-04-08 14:29:21

就像我说的,我需要更好地了解您需要匹配的模式。

下面是一些例子:

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结尾。

比方说,你想只匹配2个号码,因此会使用\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

我不是很清楚你到底想要做什么,但点''。字符代表正则表达式中的任何字符。

所以正则表达式“^ 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" 。