正则表达式匹配带特殊字符或不带重音字符的字符串?

吉尔姆人

是否有一个正则表达式可以匹配带有或不带有特殊字符的特定字符串可以说,特殊字符不敏感。

喜欢céra将匹配cera,反之亦然。

有任何想法吗?

编辑:我想匹配带有或不带有特殊/重音字符的特定字符串。不仅是任何字符串/字符。

测试例:

$clientName   = 'céra';
$this->search = 'cera';

$compareClientName = strtolower(iconv('utf-8', 'ascii//TRANSLIT', $clientName));
$this->search      = strtolower($this->search);

if (strpos($compareClientName, $this->search) !== false)
{
    $clientName = preg_replace('/(.*?)('.$this->search.')(.*?)/iu', '$1<span class="highlight">$2</span>$3', $clientName);
}

输出: <span class="highlight">céra</span>

如您所见,我要突出显示特定的搜索字符串。但是,我仍然想显示匹配字符串的原始(带重音)字符

我想我必须将它与Michael Sivolobov的答案结合起来

我想,我得工作,单独preg_match()preg_replace(),对不对?

Kethryweryn

您可以使用该\p{L}模式来匹配任何字母。

资源

您必须u在正则表达式后使用修饰符才能启用unicode模式。

范例: /\p{L}+/u

编辑:

尝试这样的事情。它应将重音替换为包含重音字母(单字符和unicode双重码)和未重音字母的搜索模式的重音。然后,您可以使用更正的搜索模式来突出显示文本。

function mbStringToArray($string)
{
    $strlen = mb_strlen($string);
    while($strlen)
    {
        $array[] = mb_substr($string, 0, 1, "UTF-8");
        $string = mb_substr($string, 1, $strlen, "UTF-8");
        $strlen = mb_strlen($string);
    }
    return $array;
}

// I had to use this ugly function to remove accents as iconv didn't work properly on my test server.
function stripAccents($stripAccents){
    return utf8_encode(strtr(utf8_decode($stripAccents),utf8_decode('àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ'),'aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY'));
}

$clientName = 'céra';

$clientNameNoAccent = stripAccents($clientName);

$clientNameArray = mbStringToArray($clientName);

foreach($clientNameArray as $pos => &$char)
{
    $charNA =$clientNameNoAccent[$pos];
    if($char != $charNA)
    {
        $char = "(?:$char|$charNA|$charNA\p{M})";
    }
}

$clientSearchPattern = implode($clientNameArray); // c(?:é|e|e\p{M})ra

$text = 'the client name is Céra but it could be Cera or céra too.';

$search = preg_replace('/(.*?)(' . $clientSearchPattern . ')(.*?)/iu', '$1<span class="highlight">$2</span>$3', $text);

echo $search; // the client name is <span class="highlight">Céra</span> but it could be <span class="highlight">Cera</span> or <span class="highlight">céra</span> too.

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

匹配不带正则表达式的字符串

来自分类Dev

尽管使用了正则表达式,但无法删除字符串中带重音的特殊字符

来自分类Dev

正则表达式以匹配变量或字符串的值(带或不带引号)

来自分类Dev

javascript正则表达式以匹配带数字和不带数字的字符串

来自分类Dev

正则表达式匹配带或不带捕获组的字符串

来自分类Dev

如何使用正则表达式匹配不带双字符的字符串

来自分类Dev

正则表达式在不带字符串的情况下匹配字符

来自分类Dev

如何使用正则表达式匹配不带双字符的字符串

来自分类Dev

拆分字符串,不带正则表达式

来自分类Dev

正则表达式以匹配包含特殊字符的数字字符串

来自分类Dev

Perl:转义字符串中的特殊字符以匹配正则表达式

来自分类Dev

正则表达式需要在字符串开头匹配特殊字符

来自分类Dev

正则表达式:在开头或某些特殊字符后匹配字符串

来自分类Dev

使用正则表达式匹配包含数字和特殊字符的字符串

来自分类Dev

Java字符串带正则表达式

来自分类Dev

字符串的正则表达式,带异常

来自分类Dev

正则表达式匹配的字符串,如果字符串不以特殊字符结尾

来自分类Dev

正则表达式-匹配字符串时不带前导和尾随空格

来自分类Dev

正则表达式模式以匹配不带冒号的字符串

来自分类Dev

正则表达式模式以匹配不带冒号的字符串

来自分类Dev

正则表达式可以匹配任何带引号的字符串或特定的不带引号的字符串

来自分类Dev

正则表达式,带连字符和不带连字符的匹配号

来自分类Dev

正则表达式可同时匹配带连字符和不带连字符的单词

来自分类Dev

正则表达式也可以匹配重音字符

来自分类Dev

Javascript正则表达式匹配最后返回带逗号的字符串

来自分类Dev

带前缀字符串的正则表达式匹配模式

来自分类Dev

正则表达式以匹配带where子句的字符串中的日期

来自分类Dev

Javascript正则表达式匹配最后返回带逗号的字符串

来自分类Dev

使用正则表达式匹配字符串?

Related 相关文章

  1. 1

    匹配不带正则表达式的字符串

  2. 2

    尽管使用了正则表达式,但无法删除字符串中带重音的特殊字符

  3. 3

    正则表达式以匹配变量或字符串的值(带或不带引号)

  4. 4

    javascript正则表达式以匹配带数字和不带数字的字符串

  5. 5

    正则表达式匹配带或不带捕获组的字符串

  6. 6

    如何使用正则表达式匹配不带双字符的字符串

  7. 7

    正则表达式在不带字符串的情况下匹配字符

  8. 8

    如何使用正则表达式匹配不带双字符的字符串

  9. 9

    拆分字符串,不带正则表达式

  10. 10

    正则表达式以匹配包含特殊字符的数字字符串

  11. 11

    Perl:转义字符串中的特殊字符以匹配正则表达式

  12. 12

    正则表达式需要在字符串开头匹配特殊字符

  13. 13

    正则表达式:在开头或某些特殊字符后匹配字符串

  14. 14

    使用正则表达式匹配包含数字和特殊字符的字符串

  15. 15

    Java字符串带正则表达式

  16. 16

    字符串的正则表达式,带异常

  17. 17

    正则表达式匹配的字符串,如果字符串不以特殊字符结尾

  18. 18

    正则表达式-匹配字符串时不带前导和尾随空格

  19. 19

    正则表达式模式以匹配不带冒号的字符串

  20. 20

    正则表达式模式以匹配不带冒号的字符串

  21. 21

    正则表达式可以匹配任何带引号的字符串或特定的不带引号的字符串

  22. 22

    正则表达式,带连字符和不带连字符的匹配号

  23. 23

    正则表达式可同时匹配带连字符和不带连字符的单词

  24. 24

    正则表达式也可以匹配重音字符

  25. 25

    Javascript正则表达式匹配最后返回带逗号的字符串

  26. 26

    带前缀字符串的正则表达式匹配模式

  27. 27

    正则表达式以匹配带where子句的字符串中的日期

  28. 28

    Javascript正则表达式匹配最后返回带逗号的字符串

  29. 29

    使用正则表达式匹配字符串?

热门标签

归档