2009-07-16 10 views
0

、それは-lp一致していない[番号]私の関数に送られ正規表現マッチの問題次の正規表現では

public static Regex lPageID = new Regex(@"\-lp\d+\.", RegexOptions.Compiled | RegexOptions.IgnoreCase); 

public static int GetPageIDFromPath(string path) 
{ 
    return GetIDFromPath(lPageID, path); 
} 

例パス:

/ドメイン/一部-ランディングページ、メタ-Title-lp1.lp

private static int GetIDFromPath(Regex regex, string path) 
{ 
    Match match = regex.Match(path); 
    if (match.Success) 
    { 
     string value = match.Value; 
     value = value.Substring(2, value.Length - 3); 
     int id; 
     if (Int32.TryParse(value, out id)) 
      return id; 
    } 

    return 0; 
} 

-lpの後に番号を取得する必要があります。私は後に、単一の文字に正規表現を変更した場合-lが正常に動作しますので、余分な文字が好きではありませんまたはpを好きではないということのようだ - など:

public static Regex lPageID = new Regex(@"\-l\d+\.", RegexOptions.Compiled | RegexOptions.IgnoreCase); 

の例の文字列で:/domain/Some-Landing-Page-Meta-Title-l1.l

+0

それは私のために働く - あなたは結果に影響を与える何か他にないと確信していますか?投稿できるコードはまだありますか? –

+0

もっとコードを表示する必要があります。これは私のクイックテストで動作します。 –

答えて

0

エラーが発生している場所あなたが言っていないが、それはあなたが使用する必要がありますように見えます"value.Length - 3"ではなく "value.Length - 4"。

私はネットブックに載っているので、テストすることはできませんが、 "。"あなたがサブリングを取るとき。その場合、Int32.TryParseは失敗します。問題はどこにあるの?

これは、 "lp1"テストが失敗したときに "l1"テストが合格したためと考えられます。

1

おそらく、一致後に番号にアクセスできるように、キャプチャ括弧を追加するだけでよいでしょうか?オプションなしで

"\-lp(\d+)\." 
0
(?<=-lp)(\d+) 

は、次のテストデータを私のために働い:

Some-Page-Meta-Title-lp1.lp 
Some-Page-Meta-Title-lp1093.lp 
Some-Page-Meta-Title-lp122.lp 
Some-Page-Meta-Title-lp1222223.lp 
+2

文字クラス([])はどのような目的のために提供されていますか? "[\ d] {1、}"は "\ d +"と同じではありませんか? –

+0

おっと...ええまったく同じです:Dは私が急いで得るものです! – Jared