开发者

preg_match for partial matches

How do I use preg_match for partial matches?

When I have the string:

www.stackoverflow.com

开发者_开发知识库and when I enter

stackoverflow.com or stackoverflow

to match the phrase it returns false. How do I make it work for partial matches?


preg_match uses regular expressions, which you can get a very good tutorial for here.

In your specific case, you are looking for a string, followed by an optional segment (to change your search into English, you want to find "stackoverflow", optionally followed by ".com"). Sections of regular expressions can be made optional by using the ? modifier:

preg_match('/stackoverflow(\.com)?/', $your_string)

The regular expression here (/stackoverflow(\.com)?/) says the same thing as our English version above -- match "stackoverflow" followed by an optional ".com".

Here's a quick overview of how the regex works:

  • The slash on each end of the pattern is a delimiter which PHP uses to enclose regular expressions.
  • The majority of characters in regular expressions are matched literally, so stackoverflow matches "stackoverflow"
  • The parentheses define a group, which is made optional by the ?. Without the group, only the token directly before the ? would be made optional (in this case the "m").
  • Note that there is a slash before the dot in ".com". This is because dots are special characters in regular expressions (used kind of like a wildcard), so it needs to be escaped if you want to match a literal dot.


preg_match is not anchored by default so it will find partial matches without any special effort. Do you have the arguments in the correct order? It's the regex first, then the string to be searched. So:

if (preg_match('/stackoverflow/', 'www.stackoverflow.com')) {
    ...
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜