正则表达式匹配一个单词,但不包含其他包含它的单词

时间:2012-08-22 10:20:58

标签: regex

我正在尝试构建一个正则表达式来匹配单词“Hi”,但不是“Hippopotamus”或“Chipmunk”。

所以我需要一个正则表达式来匹配一个特定的单词,但前提是它本身就是一个单词而不是另一个单词的一部分。

5 个答案:

答案 0 :(得分:6)

使用\b作为单词边界。

/\bHi\b/

答案 1 :(得分:2)

您可以使用单词边界: \bhi\b

如果是C#:

   private void button1_Click(object sender, EventArgs e)
    {
        var m = Regex.Match(textBox1.Text, @"/\bhi\b/");
        if (m.Success)
        {
            MessageBox.Show("Matched");
        }
    }

答案 2 :(得分:1)

或者你可以使用

  

^ Hi $,其中^表示单词的开头和$ end的结尾

仅当Hi在整条线上时才会起作用。

修改

该死! :)当然你应该使用单词边界

  

\ BHI \ B'/ P>

答案 3 :(得分:1)

在'Hi'之前和之后使用单词边界(\ b):

\bHi\b

答案 4 :(得分:0)

我想补充......如果你期望“Hippo”“chipmunk”可能匹配,那么很明显你期望匹配不区分大小写。这不是默认(不管我的经验)。如果你确实需要不区分大小写的匹配,你需要明确地设置它,作为正则表达式本身的一个标志,即。

/\bhi\b/i

(请注意尾随i

...或通过正则表达式引擎的选项,例如在.NET中你会使用像

这样的东西
Regex.Match(str, "\bhi\b", RegexOptions.IgnoreCase)