首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >括号中的x字匹配

括号中的x字匹配
EN

Stack Overflow用户
提问于 2010-11-16 17:41:20
回答 4查看 586关注 0票数 0

如果字符串包含4个或更多的单词,我将尝试删除它的括号。我一直在挠我的头,用它什么也做不了。

代码语言:javascript
复制
preg_replace('#\([word]{4,}\)#', '', $str); # pseudo code

样本字符串:

Robert Alner基金标准公开NH平跑(由Andrew Stewart慈善基金会支持)

匹配(括号中超过x个单词)并删除:

(由安德鲁·斯图尔特慈善基金会资助)

我有两个数据来源,并且正在使用:

代码语言:javascript
复制
similar_text($str1, $str2, &$percent)

比较和延长括号中的字符串对于一个源是唯一的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-11-16 18:01:34

你离我很近..。

代码语言:javascript
复制
preg_replace('#\((\b\w+\b[^\w)]*){4,}\)#', '', $str);

基本上,内部子模式(\b\w+\b[^\w)]*)匹配一个单词边界(意思不是在两个单词字符之间),后面是至少一个单词字符(a-z0-9),后面是另一个单词边界,最后是0或多个不是单词字符且不是)的字符.

用下列方法进行测试:

代码语言:javascript
复制
$tests = array(
    'test1 (this is three)',
    'test2 (this is four words)',
    'test3 (this is four words) and (this is three)',
    'test4 (this is five words inside)',
);

foreach ($tests as $str) {
    echo $str . " - " . preg_replace('#\((\b\w+\b[^\w)]*){4,}\)#', '', $str) . "\n";
}

给予:

代码语言:javascript
复制
test1 (this is three) - test1 (this is three)
test2 (this is four words) - test2
test3 (this is four words) and (this is three) - test3  and (this is three)
test4 (this is five words inside) - test4
票数 0
EN

Stack Overflow用户

发布于 2010-11-16 17:45:47

你不需要preg_replace()。只需用substr_count()计算空格,然后使用str_replace()

票数 0
EN

Stack Overflow用户

发布于 2010-11-16 17:56:51

语法[…]有一个特殊的含义。[…]被称为字符类,并匹配列出的字符之一。因此,[word]word的特征之一相匹配。

现在,如果你想匹配单词,你应该首先定义一个单词是什么。如果一个单词是除空格字符之外的字符序列(\S表示所有非空白字符),则可以这样做:

代码语言:javascript
复制
/\S+(\s+\S+){3,}/

这将匹配由空白字符(\s)分隔的任何四个或多个单词序列(非空白字符序列)。

括号内的四个或四个以上字:

代码语言:javascript
复制
/\(\S+(\s+\S+){3,})/

请注意,除了空格字符之外,\S还匹配其他任何内容,这意味着甚至连方括号都匹配。因此,您可能需要将\S更改为[^\s)]

代码语言:javascript
复制
/\([^\s)]+(\s+[^\s)]+){3,})/
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4197176

复制
相关文章

相似问题

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