首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex:指定"space or start of string“和"space or end of string”

Regex:指定"space or start of string“和"space or end of string”
EN

Stack Overflow用户
提问于 2011-07-16 05:26:23
回答 4查看 132.2K关注 0票数 154

假设你正在尝试模式匹配"stackoverflow“。

您需要以下内容:

代码语言:javascript
复制
 this is stackoverflow and it rocks [MATCH]

 stackoverflow is the best [MATCH]

 i love stackoverflow [MATCH]

 typostackoverflow rules [NO MATCH]

 i love stackoverflowtypo [NO MATCH]

我知道如何解析出stackoverflow,如果它在两个站点上都有空格,使用:

代码语言:javascript
复制
/\s(stackoverflow)\s/

如果它位于字符串的开头或结尾,则相同:

代码语言:javascript
复制
/^(stackoverflow)\s/

/\s(stackoverflow)$/

但是如何使用正则表达式指定"space or end of string“和"space or start of string”呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-16 05:32:57

您可以使用以下任一选项:

代码语言:javascript
复制
\b      #A word break and will work for both spaces and end of lines.
(^|\s)  #the | means or. () is a capturing group. 


/\b(stackoverflow)\b/

另外,如果你不想在匹配中包含空格,你可以使用lookbehind/ahead。

代码语言:javascript
复制
(?<=\s|^)         #to look behind the match
(stackoverflow)   #the string you want. () optional
(?=\s|$)          #to look ahead.
票数 210
EN

Stack Overflow用户

发布于 2011-07-16 05:28:41

(^|\s)将匹配空格或字符串开头,而($|\s)将匹配空格或字符串结尾。加在一起就是:

代码语言:javascript
复制
(^|\s)stackoverflow($|\s)
票数 87
EN

Stack Overflow用户

发布于 2011-07-16 05:38:40

下面是我要用到的:

代码语言:javascript
复制
 (?<!\S)stackoverflow(?!\S)

换句话说,如果"stackoverflow“前面没有非空格字符,后面也没有非空格字符,则匹配它。

这比“空格或锚点”方法更简洁(IMO),并且它不像\b方法那样假设字符串以单词字符开始和结束。

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6713310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档