我已经尝试了两天失败并成功匹配/ 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*[^"]
答案 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代码即可。这样就可以了。