2013-02-11 101 views
1

只是好奇知道。我注意到,与“\ B”正则表达式边界和字符串'c#'

if (preg_match('@\bC#\[email protected]', $userSkills)) {... 

但是使用它,如果我删除“\ B”它设法找到字符串时,我的正则表达式无法找到字符串“C#”。

有人知道这里可能是什么问题吗?

字符串以查找匹配:

Unified Communications Design Specialist ~$~ Windows 95 or 98 ~$~ Windows 2000 
or XP ~$~ Linux ~$~ Visual Basic ~$~ ASP Net ~$~ C# ~$~ Contact Center Design 
Specialist ~$~ Internet Programming ~$~ Object oriented programming ~$~ 
Databases ~$~ Unified Commucations ~$~ Contact Center Solutions ~$~ 
Junior Developer ~$~ Solutions Engineer 
+0

你在正则表达式中使用了哪一个?'\ b'或'/ b'? – 2013-02-11 14:25:48

+0

我发布了我试图找到匹配的字符串。它适用于除c#之外的所有字符串,据我注意到 – vodich 2013-02-11 14:47:52

回答

1

这是因为#是无字的字符。我在“C#”周围的字符串中标记了字边界,内容为|

|ASP| |Net| ~$~ |C|# ~$~ |Contact| 

你看, “#” 和 “” 之间没有边界,所以\b不匹配。

+0

为什么downvote?问题是,*为什么*'\ b'不匹配,我解释了它。 – 2013-02-11 17:49:54

+0

因此,除了str_replace('#','sharp',$ var)之外,这种情况下的任何解决方法? – vodich 2013-02-11 18:17:10

+0

你可以使用'[\ s ^](C#)[\ s $]',以便在“C#”之前或之后匹配空格或“开始”/“结束”。当然,整个模式然后匹配“C#”*,包括那些空格,因此是子模式括号。 – 2013-02-11 18:35:53

2

escape sequence\b/b word边界。

if (preg_match('@\bC#\[email protected]', $userSkills)) {... 
+0

对不起在我的问题中犯了一个错误,我现在编辑它,但问题仍然存在 – vodich 2013-02-11 14:24:37

+0

在OP彻底改变问题之前,100%正确的答案downvote?很可笑... – nickb 2013-02-11 14:32:32

+0

好吧,你的答案是不正确的,无论斜杠/反斜杠......似乎有不同类型的问题在这里 – vodich 2013-02-11 14:50:49