string類提供了一些字符串匹配的方法,比如:
下面是一個實例,演示了這四個方法的應用
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string testString = "Nocturne Studio!";
int position = 0;
position = testString.IndexOf('o');
Console.WriteLine("Character o is at the position {0} as forward", position);
position = testString.LastIndexOf('o');
Console.WriteLine("Character o is at the position {0} as backward", position);
char[] chars = new char[2] { 'c', 't' };
position = testString.IndexOfAny(chars);
Console.WriteLine("Character c or t is at the position {0} as forward", position);
position = testString.LastIndexOfAny(chars);
Console.WriteLine("Character c or t is at the position {0} as backward", position);
}
}
}
運行的結果為:
Character o is at the position 1 as forward
Character o is at the position 14 as backward
Character c or t is at the position 2 as forward
Character c or t is at the position 10 as backward
這裡的位置和數組索引一樣,是從0開始的。實際上的匹配問題要比這個復雜得多,比如要尋找所有以N開頭,以e結尾的單詞,傳統的解決辦法非常復雜,代碼量令人難以接受。這個時候,正則表達式就成為最好的選擇。
正則表達式提供了強大、靈活而且高效的方法來處理文本,其全面模式匹配表示法使得快速分析大量文本以找到特定的字符模式成為可能。.Net Framework正則表達式還包括一些其他工具(比如Perl語言、awk工具包)沒有提供的功能,比如從右到左匹配和即時編譯。
在DOS命令行中,有著*和?兩種通配符(在SQL語句中也有類似的情況),其功能大家都很熟悉了。C#中的正則表達式就類似於這樣一組元素,通過對這些元素的使用,可以創造出任何模式的正則表達式來。
語言元素
字符轉義
大多數重要的正則表達式語言運算符都是非轉義的單個字符。轉義符“\”通知分析器後面的字符不是運算符。比如,*會被視為重復限定符,而\*則被理解為真正的星號。
替換
提供有關在替換模式中使用的特殊構造的信息。字符轉義和替換是在替換模式中識別的唯一的特殊構造。下面的語法構造只允許出現在正則表達式中,替換模式中不識別它們。比如 * 在替換模式中不會被當作元字符,而只是一個普通字符。替換模式中的 $ 在正則表達式中只是表示指定字符串結尾的意思。
字符類
提供有關定義要匹配的子字符串的正則表達式字符集的信息
正則表達式選項
可以使用影響匹配行為的選項修改正則表達式模式。
原子零寬度斷言
提供有關零寬度斷言的信息,該斷言根據正則表達式分析器在輸入字符串的當前位置而使匹配成功或失敗。
限定符
提供有關修改正則表達式的可選數量數據的信息。限定符將可選數量的數據添加到正則表達式。限定符表達式應用於緊挨著它前面的字符、組或字符類。
正則表達式類
C#中提供了System.Text.RegularExpressions命名空間,提供了對.Net Framework正則表達式引擎的訪問。
常用正則表達式
下面是一些常用的正則表達式,在日常應用中很常見
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Regex r = new Regex(@"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
string emailString = "This is a string containing a Email address:\n\[email protected]\n\nNocturne Studio";
string nonEmailString = "This is a string without any email addresses\n\nNocturne Studio";
Match m = r.Match(emailString);
if (m.Success)
{
Console.WriteLine("Success!\nPosition: {0}", m.Index);
}
else
{
Console.WriteLine("Failed!");
}
m = r.Match(nonEmailString);
if (m.Success)
{
Console.WriteLine("Success!\nPosition: {0}", m.Index);
}
else
{
Console.WriteLine("Failed!");
}
}
}
}