Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 构建一个算法来查找单词中的特殊字符并替换它们_Php_Regex_Algorithm - Fatal编程技术网

Php 构建一个算法来查找单词中的特殊字符并替换它们

Php 构建一个算法来查找单词中的特殊字符并替换它们,php,regex,algorithm,Php,Regex,Algorithm,我将首先说,我对输入没有影响,纠正它的建议也帮不了我。 我在问如何修复输出 我有德语的描述。问题是其中一些在这个过程中被破坏了。具有7个德语特殊字母之一的单词可能具有以下损坏字符: ('%�%') (“%?%”) (“%Ø%”) (“%$%”) ('%3%') (“%Ã%”) (“%)%” 困难还在于,一个字母可以“翻译”成一个损坏的字符,甚至是三个损坏的字符。因此,“für”一词可以被损坏成“fér”或“f??r”或“f”�我没有任何特定的模式,我可以在正则表达式中使用 我需要建立一些算法:

我将首先说,我对输入没有影响,纠正它的建议也帮不了我。 我在问如何修复输出

我有德语的描述。问题是其中一些在这个过程中被破坏了。具有7个德语特殊字母之一的单词可能具有以下损坏字符: ('%�%')
(“%?%”)
(“%Ø%”)
(“%$%”)
('%3%')
(“%Ã%”)
(“%)%”

困难还在于,一个字母可以“翻译”成一个损坏的字符,甚至是三个损坏的字符。因此,“für”一词可以被损坏成“fér”或“f??r”或“f”�我没有任何特定的模式,我可以在正则表达式中使用

我需要建立一些算法:

  • 查找给定描述中的损坏
  • 查找损坏单词的更正
  • 我有什么

  • 描述
  • 包含所有具有特殊字符的单词的德语词典
  • 我想在PHP\Queries中实现它,但这不是强制性的。有什么办法吗?

    一般算法(必须用编程语言实现)如下所示:

    首先,让我们编写助手函数: 1) 给定一个单词,查找单词中每个损坏的字符

    2) 从第一个开始,在损坏的字符和特殊的德语字符之间进行切换

    3) 查看是否有任何单词(在“字典”中查找)以子字符串开头,直到您刚刚切换的字符。如果没有,请返回到2并进行不同的切换。如果有,继续切换下一个破裂的字符

    4) 当您无法切换任何已损坏的字符时,请检查这是否是一个单词。如果是,如果可能的话,将其添加到集合中。否则,返回并进行不同的切换

    然后,让我们转到主算法:

    1) 搜索损坏的字符(您所说的字符之一),只需逐个检查所有字符即可

    2) 当您发现一个损坏的字符时,将该字符所属的整个单词发送给helper函数

    3) 从helper函数建议的选项中选择,或者让helper函数自己选择

    4) 进行切换,移动到字符串的末尾

    5) 返回到1


    对不起,有任何打字错误,希望能有所帮助

    我希望你是在开玩笑……正确的解决方法是对文档/输入进行正确编码。试试UTF-8。这不是我的文档,我对输入没有影响。我在问如何更正输出请删除“已经有答案”,因为答案是关于编码的,不幸的是我无法更改输入。使用PHP中的
    utf8.*
    函数或
    iconv
    是否足够?您的算法。如果损坏的字符数与正确的字符数相同,将非常有用。它将如何与“f?r”和“for?”(第二个是正确的,在单词的末尾有一个“?”)。我担心的第二个问题是运行时间。对于每个损坏的单词,我需要在整个词典中搜索所有特殊德语字符的组合…对于第一个问题-不,它不要求损坏字符的数量等于特殊德语字符的数量。对于“for?”-在helper函数中,我应该添加一个选项,如果特殊字符位于字符串末尾,则不修改字符串,因此它将检查当我们在特殊字符中替换损坏的字符时会发生什么,如果我们只是擦除它,则会发生什么,只要这是单词中的最后一个字符。对于第二个问题,运行时并没有那么糟糕,因为您只需要查看具有公共起始子字符串的某些单词。这仍然是一个问题,但比检查整个字典要好得多。您的算法是如何实现的。解决了原来的单词中有3个字母,而损坏的单词中我可以有5-6个字母的问题?