如何获取正则表达式以匹配带空格的项目

时间:2009-02-12 14:52:22

标签: .net asp.net vb.net regex

如果没有空格字符,则以下正则表达式有效,但如果输入具有空格字符,则它不起作用(它看起来像链接但JavaScript不起作用)。

我该如何更改?

正则表达式应适用于WorldThe World

    Dim makebkz As String
    Dim pattern As String = "\(bkz: ([a-z0-9$&.öışçğü\s]+)\)"
    Dim regex As New Regex(pattern, RegexOptions.IgnoreCase)
    Dim myAnchor As New System.Web.UI.HtmlControls.HtmlAnchor()
    Dim postbackRef As String = Page.GetPostBackEventReference(myAnchor, "$1")
    myAnchor.HRef = postbackRef

    str = regex.Replace(str, "(bkz: <a href=javascript:" & myAnchor.HRef & "><font color=""#CC0000"">$1</font></a> )")
    makebkz = str
    Return makebkz

5 个答案:

答案 0 :(得分:2)

实际上,有一个空间'字符'。它是'\ s'(减去引号)。

答案 1 :(得分:2)

我认为应该改变这一行:

str = regex.Replace(str, "(bkz: <a href=javascript:" & myAnchor.HRef & "><font color=""#CC0000"">$1</font></a> )")

如果我正确地读了你的代码,你在HRef中包含$ 1(这就是Page.GetPostBackEventReference(myAnchor,“$ 1”)正在做的事情),然后在字体标签和href之间的文本中替换它,所以你的输出将是这样的:

(bkz: <a href=javascript:__doPostBack(The World)><font color=""#CC0000"">The World</font></a> )

如果你更新你的替换功能,它应该工作:

str = regex.Replace(str, "(bkz: <a href=""javascript:" & myAnchor.HRef & """><font color=""#CC0000"">$1</font></a> )")

即。用引号括起javascript调用,你的世界将会很好。

答案 2 :(得分:1)

\ s 将匹配任何空格字符。一定要妥善解决这个问题。

答案 3 :(得分:1)

为了清楚起见,您是否说(bkz: world)之类的内容有效,但(bkz: the world)却没有?

您目前拥有的正则表达式将匹配两者(在RegexBuddy中进行验证),并且您的捕获组应该没问题(它应该在第一种情况下捕获world并在第二种情况下捕获the world

在事情无效的情况下,在致电str后,Replace中存储的内容是什么?我的猜测是你生成的字符串是问题所在,而不是正则表达式本身。

答案 4 :(得分:0)

尝试使空格字符有条件\ s *表示bkz:block之间可以有0个或多个空格。你也可以使用\ s?如果有0或1个空格。

Dim pattern As String = "\(bkz:\s*([a-z0-9$&.öışçğü\s]+)\)"

虽然由于你的第二个模式包含一个空格的匹配,你可能需要扩展你的表达式,以表明parenthisized匹配中的第一个字符不是空格,这里是一个样本。

Dim pattern As String = "\(bkz:\s*([a-z0-9$&.öışçğü][a-z0-9$&.öışçğü\s]+)\)"