【问题标题】:PHP - remove duplicate syllable wordPHP - 删除重复的音节词
【发布时间】:2013-05-28 20:48:44
【问题描述】:

我是新手,想知道如何在 php 中使用正则表达式。 如果我有 "haha" "abcabcabc" "hehehe" "cupcupcupcup" 之类的文字(包含重复的音节词)。

如何删除该文本?

(比如$text="cupcupcup";",如何让这个像$text="";

抱歉,如果有相同的问题(我有搜索,但找不到描述我的问题的页面)

感谢您的赞赏。 :)

【问题讨论】:

  • 如果字符串是hahaabcabcabc怎么办?
  • (包含重复的音节词)。如何删除该文本?也许在您的文本中不包含任何内容
  • 你的意思是如果你有$text="cupcupcup";,你应该得到$text="";

标签: php regex string duplicates


【解决方案1】:

试试

$txt = preg_replace("/^(.*)(\\1+)$/", "", $txt);

这会在字符串的开头搜索一个序列,然后匹配该字符串的至少一个重复项,然后匹配字符串的结尾。

例如

$txt = preg_replace("/^(.*)(\\1+)$/", "", "cupcupcup");  //=> ""
$txt = preg_replace("/^(.*)(\\1+)$/", "", "cucupcup");   //=> "cucupcup"

【讨论】:

  • @HamZa 它不应该因为在字符串结束之前至少需要下一个子模式一次(由于+ 量词)。
  • 打印 preg_replace("/^(.*)(\1+)$/", "", "sasa"); // => sasa,而不是 "" :-(
  • @user4035 抱歉忘记用第二个 `\` 转义反向引用,已更新答案。现在再试一次!
  • @user4035 如果您对它感到满意,请接受答案:)
  • 这将替换各种单词
【解决方案2】:

好吧,我想这会做

\b(?=\w*[aeiou]\w*)(\w*)\1+
     -------------
           |
           |->check if its a syllable word

将其替换为""

【讨论】:

  • 对,我没有把音节词作为要求,很好。
  • @Graham 完善了你的正则表达式..:)
【解决方案3】:

这就是我想出的:

([b-df-hj-np-tv-xz][aeiouy](?:[a-z])?|[aeiouy][b-df-hj-np-tv-xz](?:[a-z])?)(\1){2,}

Online demo

说明:

  • [b-df-hj-np-tv-xz] :匹配辅音。
  • [aeiouy] :匹配元音。
  • [a-z] :匹配一个字母。
  • ([b-df-hj-np-tv-xz][aeiouy](?:[a-z])? :匹配辅音后跟元音,也可以选择后跟字母。
  • |[aeiouy][b-df-hj-np-tv-xz](?:[a-z])?) :或匹配元音后接辅音,后接可选字母。
  • (\1){2,} :重复第 1 组两次或更多次。

【讨论】:

    【解决方案4】:

    如果文字像:

    $txt = preg_replace("/(.*)(\\1+)/", "", "the text is  cupcupcup and cupcupcupa");
    

    这将删除 cupcupcupcupcupcupa 。如何删除cupcupcup

    【讨论】:

    • @Graham 你能解决这个问题吗?
    猜你喜欢
    • 2013-06-11
    • 2014-04-05
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 2019-09-09
    • 2014-01-15
    • 2011-09-23
    相关资源
    最近更新 更多