0

我已经尝试了两天,但未能成功匹配 /u/{word or underscore or numbers}。如果它在链接中,我还需要忽略该值(例如:<a href="asdfasdf/u/word" />。我已经用尽了所有选项。有人可以在这里帮助我吗?

编辑:我不熟悉正则表达式,并且仍在尝试弄清楚它们。对不起,如果这是一个愚蠢的问题。澄清一下,我可以很好地匹配比赛。如果某个字符跟随,我只是不明白在正则表达式中如何完全忽略匹配。

例子:

/u/username

/u/username这是

这/是/你/用户 <a href="http://www.regex.com/u/something/" />

我想匹配 /u/username 的前两次出现。

这很尴尬,但这是我目前的正则表达式/u/\w*[^"]

4

2 回答 2

3

您可以使用以下模式:

/u/\w*

它将匹配/u/后跟零个或多个字母、数字或下划线的字符串。要确保字符串仅包含此模式,请使用 start ( ^) 和 end ( $) 锚点,如下所示:

^/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 回答
0

这个正则表达式将满足您的测试场景

\w*(/u)*[a-z,A-Z,0-9]+$

这实际上捕获了 HTML 标记所特有的字符,只要您想忽略 HTML 代码。这会成功的。

于 2013-06-06T23:44:00.053 回答