0

/u/{word or underscore or numbers} との一致に 2 日間試みましたが失敗しました。また、値がリンクにある場合は無視する必要があります (例: <a href="asdfasdf/u/word" />。すべてのオプションを使い果たしました。誰か助けてください。

編集:私は正規表現に慣れておらず、まだ理解しようとしています。これが初心者の質問であればすみません。明確にするために、私は一致をうまく得ることができます。特定の文字が続く場合に一致を完全に無視する方法を正規表現で理解していません。

例:

/u/username

/u/usernameこれは

これ/は/あなた/ユーザー <a href="http://www.regex.com/u/something/" />

/u/username の最初の 2 つの出現を一致させたいと考えています。

これは恥ずかしいですが、これが私の現在の正規表現です/u/\w*[^"]

4

2 に答える 2

3

次のパターンを使用できます。

/u/\w*

/u/これは、0 個以上の文字、数字、またはアンダースコアが後に続く文字列と一致します。文字列がこのパターンのみで構成されていることを確認するには、次のように開始 ( ) アンカー^と終了 ( $) アンカーを使用します。

^/u/\w*$

例えば:

string result = Regex.Match(input, @"^/u/\w*$").Value;

HTML の特別な構文解析を行おうとしている場合、残念ながら正規表現は非常に悪いオプションです。最初にドキュメントを適切に解析する方法を見つける必要があります。それにもかかわらず、属性内にある場合にこのシーケンスを無視する非常にhref大雑把なパターンを次に示します (属性値が引用符で囲まれていることも前提としています)。

(?<!href="[^"]*)/u/\w*

例えば:

string input = @"<a href=""http://x/u/foo"">/u/bar</a>";
string pattern = @"(?<!href=""[^""]+)/u/\w*";
string Regex.Match(input, pattern).Value; // will match /u/bar but not /u/foo

このパターンは、単語の文字 (文字、数字、またはアンダースコア)、引用符、またはスラッシュが前にない任意のシーケンスに一致します。

(?<![\w""/])/u/\w*

この例は、文字列からすべての一致を取得する方法を示しています。

var input = @"/u/username
/u/username this is
this/is/u/user <a href=""http://www.regex.com/u/something/"" />";
var pattern = @"(?<![\w""/])/u/\w*";
foreach(Match match in Regex.Matches(input, pattern))
{
    System.Console.WriteLine(match.Value);
}

出力は私になります:

/u/username
/u/username
于 2013-06-06T22:51:41.203 に答える