欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何利用C#正則表達(dá)式判斷是否是有效的文件及文件夾路徑

 更新時(shí)間:2022年04月01日 08:31:09   作者:幾個(gè)酒菜成這樣  
項(xiàng)目中少不了讀取或設(shè)置文件路徑的功能,如何才能對(duì)輸入的路徑是否合法進(jìn)行判斷呢?下面這篇文章主要給大家介紹了關(guān)于C#利用正則表達(dá)式判斷是否是有效的文件及文件夾路徑的相關(guān)資料,需要的朋友可以參考下

省流

/// <summary>
/// 是否有效的文件,文件夾路徑
/// </summary>
/// <param name="val"></param>
/// <returns>是,返回true;不是返回false</returns>
public bool IsValidFolderPath(string val)
{
    Regex regex = new Regex(@"^([a-zA-Z]:\\)([-\u4e00-\u9fa5\w\s.()~!@#$%^&()\[\]{}+=]+\\?)*$");
    Match result = regex.Match(val);
    return result.Success;
}

// "F:\\Total客戶端項(xiàng)目\\客戶端項(xiàng)目\\2017-01-09 Client\\(aa)\\V1.3.4\\New_1.2\\V13&V14\\.()~!@#$%^&()-+="; // 匹配結(jié)果:true

解釋?zhuān)?/p>

分為2大段,一段匹配盤(pán)符,一段匹配后續(xù)文件、文件夾路徑

  • ^([a-zA-Z]:\\):必須以盤(pán)符的形式開(kāi)頭。

    ^表示從起始位置匹配,[a-zA-Z]表示第1位必須是a~z或A~Z其中之一。:\\表示第1位后必須接字符串:\。\\是正則中\(zhòng)的轉(zhuǎn)義。

  • ([-\u4e00-\u9fa5\w\s.()~!@#$%^&()\[\]{}+=]+\\?)*$:后續(xù)以一定取值范圍組成一個(gè)個(gè)結(jié)構(gòu)。

    先看[]內(nèi),\u4e00-\u9fa5表示匹配漢字,\w,\s都是元字符有其對(duì)應(yīng)的匹配范圍。其余這些字符-.()~!@#$%^&()\[\]{}+=就代表它們自身。其中\(zhòng)[是[的轉(zhuǎn)義,\]是]的轉(zhuǎn)義。[~]+表示[]中的內(nèi)容至少需要出現(xiàn)1次。\\?表示,[~]內(nèi)的字符寫(xiě)完后,可以在后面接一個(gè)字符\,也可以不接。(~)*表示()內(nèi)容可以重復(fù)任意次數(shù),也可以一次不出現(xiàn)。$表示匹配到結(jié)束位置,搭配前面的^表示整個(gè)輸入字符串的結(jié)構(gòu)都得符合這個(gè)正則表達(dá)式。

幾點(diǎn)注意:

  • 上面得[~]指代表達(dá)式中[]的所有內(nèi)容,(~)指代表達(dá)式中()的所有內(nèi)容,應(yīng)該挺好理解吧。
  • 寫(xiě)了解釋主要是自己總結(jié)一下,你看估計(jì)也看不懂,要不直接拿去用,要不老老實(shí)實(shí)去學(xué)吧,這些都是基礎(chǔ),就把正則表達(dá)式的基礎(chǔ)學(xué)了基本就夠用。
  • 不同系統(tǒng)下可不可以匹配漢字是不一樣的。比如C#環(huán)境里\w好像就可以匹配漢字,但javascript環(huán)境里\w就匹配不了漢字。
  • 正則自己的轉(zhuǎn)義和放入字符串中的轉(zhuǎn)義挺容易懵的,寫(xiě)的時(shí)候要注意。
  • 個(gè)人理解,只有一個(gè)路徑,是判斷不出來(lái)這個(gè)路徑是文件還是文件夾的,因?yàn)槲募A名也可以叫setup.exe,文件名也可以沒(méi)有后綴。windows的文件命名規(guī)范中只不允許9個(gè)字符的出現(xiàn)。/ \ ? * : " < > |其他都可以。

學(xué)習(xí)編寫(xiě)驗(yàn)證過(guò)程

鑒于網(wǎng)上找了好幾個(gè)都是垃圾,既不好使也不知道到底在判斷啥,所以不得不萬(wàn)事靠自己。

學(xué)習(xí)自http://www.dbjr.com.cn/tools/zhengze.html

元字符metacharacter

字符相關(guān)解釋 
\b匹配單詞的開(kāi)頭或結(jié)尾,也就是單詞的分界處。可用于精確查找一個(gè)單詞 
.匹配除了換行以外的任意字符 
**前面的內(nèi)容可以重復(fù)任意次 
++前面的內(nèi)容可以連續(xù)重復(fù)1或任意更多次。通俗一點(diǎn)說(shuō),就是至少得匹配一次。 
??前面的內(nèi)容可以連續(xù)重復(fù)0或1次。 
{x}x:數(shù)字。{x}前面的內(nèi)容必須重復(fù)x次 
{x,}x。{x,}前面的內(nèi)容必須重復(fù)至少x次 
{x,y}x,y:數(shù)字。{x,y}前面的內(nèi)容必須重復(fù)x,y之間的次數(shù),包括x,y 
(xxx)表示分組 
[x,y,z]表示單個(gè)匹配 
\d匹配一位十進(jìn)制數(shù)字,也就是0~9[0-9]
\s匹配任意空白符,空格,制表符,換行符,中文全角空格等 
\w匹配數(shù)字,字母,下劃線【中文】[a-z0-9A-Z_]
^匹配字符串的開(kāi)始位置 
$匹配字符串的結(jié)束位置 

如何從一個(gè)字符串中查找字符串‘hi’?

Regex regex = new Regex("hi");
// 注意:如history,high等詞中的hi也會(huì)被匹配。

如何精確查找hi這個(gè)詞?使用\b

Regex regex = new Regex(@"\bhi\b");

這樣就可以精確查找到‘hi’這個(gè)詞。

如何查找hi,xxxxx,Lucy?

Regex regex = new Regex(@"\bhi\b.*\bLucy\b");
// `.*`不能換行。是匹配不包含換行的任意數(shù)量字符

如何匹配一個(gè)中國(guó)電話號(hào)碼?格式為:xx-xxxxxxxxxxxxxxx

Regex regex = new Regex(@"\d\d-\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d");

如何匹配一個(gè)188開(kāi)頭的電話號(hào)碼?

Regex regex = new Regex(@"\d\d-188\d\d\d\d\d\d\d\d\d\d\d\d");

這如果要匹配一個(gè)100位數(shù)字豈不是都寫(xiě)不下了,所以必然存在優(yōu)化寫(xiě)法。

Regex regex = new Regex(@"\d{2}-188\d{12}");

\d{2} 的話能不能匹配85555這種?與high中匹配hi一樣?

如果沒(méi)有限制也是會(huì)都匹配的,如果想要精確匹配,也要在前后使用元字符\b

如果有長(zhǎng)號(hào)有短號(hào)想一起匹配怎么辦?

Regex regex = new Regex(@"\d{2,3}-188\d{6,12}");

解析一個(gè)電話號(hào)相關(guān)的表達(dá)式^\(?0\d{2}[) -]?\d{8}

  • ^:表示驗(yàn)證字符串必須以(或0開(kāi)頭
  • \(? : \(是(的轉(zhuǎn)義,?表示出現(xiàn)1次或不出現(xiàn)
  • 0\d{2} : 表示0起始后面跟2位數(shù)字
  • [) -]?:表示數(shù)字后面的1位或者什么都沒(méi)有,或者是),空格,-3個(gè)中的一個(gè)
  • \d{8}:表示8位數(shù)字。
string phone = "(010)88886666";
string phone1 = "(010x88886666";
string phone2 = "011)-888866660000";
string phone3 = "011-888866660000";
string phone4 = "99011-88886666";
Regex regex30 = new Regex(@"^\(?0\d{2}[) -]?\d{8}");
Match resultphone = regex30.Match(phone);// 匹配成功
Match resultphone1 = regex30.Match(phone1);// 匹配失敗,因?yàn)?10后出現(xiàn)了[]中不存在的字符
Match resultphone2 = regex30.Match(phone2);// 匹配失敗,因?yàn)閇]后沒(méi)有接8位數(shù)字,不是說(shuō)-也在[]中就可以,[]永遠(yuǎn)只匹配一個(gè)位置
Match resultphone3 = regex30.Match(phone3);// 匹配成功,因?yàn)檫@個(gè)正則表達(dá)式?jīng)]有用$限制結(jié)尾
Match resultphone4 = regex30.Match(phone4);// 匹配失敗,因?yàn)檫@個(gè)正則表達(dá)式用^限制了開(kāi)頭,必須為(或0。

關(guān)于^和$

以前老不理解這玩意都啥用,其實(shí)就是對(duì)匹配范圍進(jìn)行限制。以一段數(shù)字字符為例。

正常使用9/d{2}進(jìn)行匹配,匹配條件可以解釋為,“以9開(kāi)頭并在后面跟任意2位數(shù)字的字符串”可以匹配成功,也就是998。

但如果使用^進(jìn)行限制^9/d{2}。匹配條件就變?yōu)?ldquo;輸入字符串必須是以9并在后面跟任意2位數(shù)字開(kāi)頭的字符串”。匹配就會(huì)失敗。

把9去掉^/d{2},匹配條件就變?yōu)?ldquo;輸入字符串必須是以任意2位數(shù)字開(kāi)頭的字符串”。匹配就會(huì)成功。

若用$限制/d{2}$,匹配條件就變?yōu)?ldquo;輸入字符串必須是以任意2位數(shù)字結(jié)尾的字符串”。匹配成功。

若改為58$,匹配條件就變?yōu)?ldquo;輸入字符串必須是以‘58’結(jié)尾的字符串”。匹配就會(huì)失敗。

若用^,$限制,^/d{2}$,匹配條件就變?yōu)?ldquo;輸入字符串必須是2位數(shù)字的字符串”,匹配失敗。

改為^/d{18}$,,匹配條件就變?yōu)?ldquo;輸入字符串必須是18位數(shù)字的字符串”,匹配成功。

代碼如下:

string numberStr2 = "123456789987645312";
Regex regex2 = new Regex(@"9\d{2}");
Match result2 = regex2.Match(numberStr2);

Regex regex3 = new Regex(@"^9\d{2}");
Match result3 = regex3.Match(numberStr2);

Regex regex4 = new Regex(@"\d{2}$");
Match result4 = regex4.Match(numberStr2);

Regex regex5 = new Regex(@"58$");
Match result5 = regex5.Match(numberStr2);

Regex regex6 = new Regex(@"^\d{2}$");
Match result6 = regex6.Match(numberStr2);

Regex regex7 = new Regex(@"^\d{18}$");
Match result7 = regex7.Match(numberStr2);

關(guān)于(),[],和{}

首先是{},這個(gè)沒(méi)什么說(shuō)的,就是表示重復(fù)次數(shù)的。{2},{2,},{2,5}這種。

其次[]表示單個(gè)匹配。只能表示1個(gè)位置,這個(gè)位置的內(nèi)容必須為[]中的選項(xiàng)之一。

看到這么描述大約有以下幾種疑問(wèn)

單獨(dú)使用[]有啥用?

Regex regex8 = new Regex(@"[打]");
Match result8 = regex8.Match(Str8);

Regex regex9 = new Regex(@"[打s]");
Match result9 = regex9.Match(Str8);

Regex regex10 = new Regex(@"[打s黑]");
Match result10 = regex10.Match(Str8);

Regex regex11 = new Regex(@"[黑]");
Match result11 = regex11.Match(Str8);

Regex regex12 = new Regex(@"打");
Match result12 = regex12.Match(Str8);

Regex regex13 = new Regex(@"黑s打");
Match result13 = regex13.Match(Str8);// 匹配失敗

Regex regex14 = new Regex(@"[黑s打]");// 匹配成功,找到‘打'
Match result14 = regex14.Match(Str8);

// 單獨(dú)使用就是從頭至尾匹配輸入字符串的每一個(gè)字符。找到輸入字符串中第一個(gè)能與[]中任意一個(gè)字符匹配的上的。
// 如果[]中只有1個(gè)字符,那有沒(méi)有[]完全一樣。如果[]內(nèi)有多個(gè)字符是不一樣的。
// 想象不出來(lái)使用場(chǎng)景,[]在實(shí)際應(yīng)用中也大多配合其他條件一起使用

[]里要是有元字符怎么辦?

解決方法很簡(jiǎn)單:轉(zhuǎn)義。

但具體怎么轉(zhuǎn)其實(shí)還是有點(diǎn)繞。這個(gè)繞不是說(shuō)有多難,而是這個(gè)點(diǎn)你需要有印象,遇到的時(shí)候要能反映過(guò)來(lái)。

這個(gè)我認(rèn)為很容易懵的點(diǎn)在于C#自身字符串的轉(zhuǎn)義與正則表達(dá)式的轉(zhuǎn)義混合。

首先明確一下C#中的轉(zhuǎn)義,C#中轉(zhuǎn)義有2種方法:

// 字符原文:
//a我打[]{}aa\bb"cc''dd^ee/dff
//another row
// '[',']','{','}',''','^','/'本身就不需要轉(zhuǎn)義,需要轉(zhuǎn)義的是'\','"',換行

// 第1種 需要轉(zhuǎn)義的符號(hào)前加'\'
string stringStr1 = "a我打[]{}aa\\bb\"cc''dd^ee/dff\r\nanother row";
// 第2種,整個(gè)字符串用'@'修飾
// 這種情況下,'\',換行不用轉(zhuǎn)義了。但'"'還需要轉(zhuǎn)義,因?yàn)椴晦D(zhuǎn)義字符串就提前結(jié)束了,用兩個(gè)雙引號(hào)'""'表示普通字符'"'
string stringStr2 = @"a我打[]{}aa\bb""cc''dd^ee/dff
another row";

正則表達(dá)式中需要轉(zhuǎn)義的符號(hào)很多,所有元字符全部需要轉(zhuǎn)義。但好消息是轉(zhuǎn)義方式只有1種,就是在需要轉(zhuǎn)義的符號(hào)前加\。

這再把這些表達(dá)式放入C#字符串中,就分不清到底是字符串轉(zhuǎn)義,還是正則轉(zhuǎn)義,正則轉(zhuǎn)義后進(jìn)入字符串會(huì)不會(huì)又要轉(zhuǎn)義等等等等。懵。

元字符包括:( ) [ ] { } \ ^ $ | ? * . + /。 ”/“需不需要轉(zhuǎn)義好像有點(diǎn)爭(zhēng)議。查了一下發(fā)現(xiàn)很多編譯器關(guān)于正則的轉(zhuǎn)義是有一些默認(rèn)處理的,也沒(méi)找到個(gè)權(quán)威的規(guī)則,就視具體情況而定。

// 上面的例子,匹配一個(gè)9開(kāi)頭跟2個(gè)數(shù)字的字符
Regex regex15 = new Regex("9\d{2}"); // 這樣寫(xiě)就會(huì)報(bào)錯(cuò),因?yàn)檎齽t'\d'中的'\'是c#字符串中轉(zhuǎn)義的標(biāo)識(shí)。這么寫(xiě)C#就會(huì)認(rèn)為'\d'是一個(gè)轉(zhuǎn)義符,而又不知道轉(zhuǎn)義成了什么,就會(huì)報(bào)錯(cuò):CS1009:無(wú)法識(shí)別的轉(zhuǎn)義序列。
// 所需要將'\'轉(zhuǎn)義,如上使用@或另一種轉(zhuǎn)義方法都可以
Regex regex16 = new Regex(@"9\d{2}");
Regex regex17 = new Regex("9\\d{2}");

// 另一個(gè)很需要有印象的例子。就是一個(gè)位置只能使用字符'\'或字符'd'
// 其實(shí)很簡(jiǎn)單,用[]就行
Regex regex18 = new Regex("[\d]");//如上報(bào)錯(cuò):CS1009:無(wú)法識(shí)別的轉(zhuǎn)義序列。
// 一開(kāi)沒(méi)轉(zhuǎn)義,改為
Regex regex19 = new Regex("[\\d]");//編譯通過(guò),完活。
string str10 = @"a我打[]{}aa\bb""cc''dd^ee/dff\\";
Match result19 = regex19.Match(str10);// 匹配失敗
// 然而result19的結(jié)果是 匹配失敗。
// 這就是字符轉(zhuǎn)義與正則轉(zhuǎn)義的混合。
// '\\d'僅處理了字符串中'\'的問(wèn)題,沒(méi)有解決正則'[\d]'中'\'也需要轉(zhuǎn)義的問(wèn)題;
// 想要實(shí)現(xiàn)一個(gè)位置只能使用字符'\'或字符'd',正確的正則表達(dá)應(yīng)該為[\\d]
// 那么再將其放入C#字符串中,每個(gè)'\'都要再轉(zhuǎn)義一次,即為
Regex regex20 = new Regex("[\\\\d]");
Match result20 = regex20.Match(str10);
// 或
Regex regex21 = new Regex(@"[\\d]");
Match result21 = regex21.Match(str10);
// 我還好奇了一下[]中有重復(fù)字符會(huì)怎樣
Regex regex22 = new Regex(@"[\\\\d]");
Match result22 = regex22.Match(str10);
// 結(jié)果好像沒(méi)啥區(qū)別,有相同字符無(wú)所謂的,沒(méi)影響

// 這里后續(xù)使用又發(fā)現(xiàn)了一點(diǎn),補(bǔ)充一下
// 前文提到:
Regex regex19 = new Regex("[\\d]");
string str10 = @"a我打[]{}aa\bb""cc''dd^ee/dff\\";
Match result19 = regex19.Match(str10);
// 會(huì)編譯通過(guò),但是匹配失敗。這里遺漏了一個(gè)問(wèn)題,就是new Regex("[\\d]");到底再匹配什么?
// 答案就是它再匹配'/d',也就是任意以為0~9的數(shù)字
string str101 = @"a我打[]{}aa\bb""cc''dd^ee/dff\\";
string str102 = @"a我打[]{}aa\bb""cc''d9d^ee/dff\\";//中間加了個(gè)9
Regex regex191 = new Regex("[\\d]");
Match result191 = regex191.Match(str101);//匹配失敗
Match result192 = regex191.Match(str102);//匹配成功,找到9
//所以[],不止能匹配[]中的實(shí)際內(nèi)容,還可以配合元字符匹配所有那一類(lèi)字符

[]搭配-可以表示連續(xù)的字符

Regex regex22 = new Regex("[0-3]");// 某位置匹配0~3,也就是0,1,2,3

[]搭配^可以表示排除

Regex regex23 = new Regex("[^0-3]");//  某位置匹配除了0,1,2,3都可以。

可以復(fù)習(xí)一下要是就想匹配-,^,甚至[]怎么辦?

Regex regex24 = new Regex("[\\^\\[\\]\\-]");
//或
Regex regex25 = new Regex(@"[\^\[\]\-]");

這里實(shí)際試了一下這些特殊字符,除了[ 和 ]不轉(zhuǎn)義也能匹配,迷惑。

最后就是(),()有很多功能,包括限制多選結(jié)構(gòu)的范圍,分組,捕獲文本,環(huán)視,特殊模式處理。

我感覺(jué)比較基礎(chǔ)的使用就是限制多選與分組。

// 匹配必須整段一模一樣的abc或bcd或cde,
Regex regex26 = new Regex("(abc|bcd|cde)");

// 匹配必須有連續(xù)2個(gè)adb的重復(fù),也就是abcabc,abcaabc不行
Regex regex27 = new Regex("(abc){2}");

總結(jié)

到此這篇關(guān)于C#利用正則表達(dá)式判斷是否是有效的文件及文件夾路徑的文章就介紹到這了,更多相關(guān)C#正則表達(dá)式判斷有效文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#基于簡(jiǎn)單工廠模式實(shí)現(xiàn)的計(jì)算器功能示例

    C#基于簡(jiǎn)單工廠模式實(shí)現(xiàn)的計(jì)算器功能示例

    這篇文章主要介紹了C#基于簡(jiǎn)單工廠模式實(shí)現(xiàn)的計(jì)算器功能,結(jié)合簡(jiǎn)單實(shí)例形式分析了C#使用工廠模式的數(shù)值運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • C#獲取圖片文件擴(kuò)展名的方法

    C#獲取圖片文件擴(kuò)展名的方法

    這篇文章主要介紹了C#獲取圖片文件擴(kuò)展名的方法,實(shí)例總結(jié)了較為常見(jiàn)的獲取圖片文件擴(kuò)展名的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • C#多線程開(kāi)發(fā)實(shí)戰(zhàn)記錄之線程基礎(chǔ)

    C#多線程開(kāi)發(fā)實(shí)戰(zhàn)記錄之線程基礎(chǔ)

    線程是一個(gè)獨(dú)立的運(yùn)行單元,每個(gè)進(jìn)程內(nèi)部有多個(gè)線程,每個(gè)線程可以各自同時(shí)執(zhí)行指令,每個(gè)線程有自己獨(dú)立的棧,但是與進(jìn)程內(nèi)的其他線程共享內(nèi)存,這篇文章主要給大家介紹了關(guān)于C#多線程開(kāi)發(fā)實(shí)戰(zhàn)記錄之線程基礎(chǔ)的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • C#利用時(shí)間和隨即字符串創(chuàng)建唯一的訂單編號(hào)

    C#利用時(shí)間和隨即字符串創(chuàng)建唯一的訂單編號(hào)

    本文介紹了利用時(shí)間和隨機(jī)字符串組合生成唯一訂單號(hào)的示例,從而保證訂單號(hào)不會(huì)重復(fù),希望能夠?qū)Υ蠹矣兴鶐椭?/div> 2016-03-03
  • c# 基于Titanium爬取微信公眾號(hào)歷史文章列表

    c# 基于Titanium爬取微信公眾號(hào)歷史文章列表

    這篇文章主要介紹了c# 基于Titanium爬取微信公眾號(hào)歷史文章列表,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03
  • c#英文單詞分類(lèi)統(tǒng)計(jì)示例分享

    c#英文單詞分類(lèi)統(tǒng)計(jì)示例分享

    本文給出的題目是給出一段英文,對(duì)其分類(lèi)統(tǒng)計(jì)出英文單詞的個(gè)數(shù)如:長(zhǎng)度為4的單詞有2個(gè),長(zhǎng)度為3的有1個(gè),下面是題目答案
    2014-03-03
  • C# List中FindAll用法的一些簡(jiǎn)單示例

    C# List中FindAll用法的一些簡(jiǎn)單示例

    本篇文章只要是對(duì)C# List中FindAll用法的一些簡(jiǎn)單示例進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2014-01-01
  • C#關(guān)機(jī)小程序源碼

    C#關(guān)機(jī)小程序源碼

    這是用所學(xué)習(xí)的C#做的一個(gè)關(guān)機(jī)小程序,功能不多,只是為了練手,需要的朋友可以參考下
    2012-10-10
  • C語(yǔ)言使用getch()讀取方向鍵

    C語(yǔ)言使用getch()讀取方向鍵

    getch()是編程中所用的函數(shù),這個(gè)函數(shù)是一個(gè)不回顯函數(shù),當(dāng)用戶按下某個(gè)字符時(shí),函數(shù)自動(dòng)讀取,無(wú)需按回車(chē),有的C語(yǔ)言命令行程序會(huì)用到此函數(shù)做游戲,但是這個(gè)函數(shù)并非標(biāo)準(zhǔn)函數(shù),要注意移植性
    2021-07-07
  • c# 抓取Web網(wǎng)頁(yè)數(shù)據(jù)分析

    c# 抓取Web網(wǎng)頁(yè)數(shù)據(jù)分析

    通過(guò)程序自動(dòng)的讀取其它網(wǎng)站網(wǎng)頁(yè)顯示的信息,類(lèi)似于爬蟲(chóng)程序。比方說(shuō)我們有一個(gè)系統(tǒng),要提取BaiDu網(wǎng)站上歌曲搜索排名。分析系統(tǒng)在根據(jù)得到的數(shù)據(jù)進(jìn)行數(shù)據(jù)分析。為業(yè)務(wù)提供參考數(shù)據(jù)。
    2008-11-11

最新評(píng)論