正则表达式匹配/ u / {word或下划线或数字}

时间:2013-06-06 22:47:03

标签: c# regex

我已经尝试了两天失败并成功匹配/ u / {word或下划线或数字}。我还需要忽略该值,如果它在链接中(例如:<a href="asdfasdf/u/word" />。我已经用尽了所有选项。有人可以帮助我吗?

编辑:我对正则表达式不熟悉,但仍在努力解决这些问题。如果这是一个愚蠢的问题,请原谅。为了澄清,我可以很好地完成比赛。我只是在Regex中不明白如果某个字符跟随,如何完全忽略匹配。

示例:

  

/u/username

     

/u/username这是

     

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

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

这很令人尴尬,但这是我现在的正则表达式/u/\w*[^"]

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

这实际上捕获了HTML标记特有的字符,因此只要您想忽略HTML代码即可。这样就可以了。