如何使用PHP匹配字母数字和符号?

时间:2016-07-14 13:24:06

标签: php regex preg-replace

我正在使用存储在变量$title中的UTF8编码中的文本内容。

使用preg_replace,如果$title字符串以以下结尾,如何附加额外空格:

  • 大写/小写字符
  • 符号,例如。 ?!

4 个答案:

答案 0 :(得分:2)

在行结束前使用正面观察。
并用空格代替。

$title = preg_replace('/(?<=[A-Za-z0-9?!])$/',' ', $title);

试试here

答案 1 :(得分:2)

这应该可以解决问题:

preg_replace('/^(.*[\w?!])$/', "$1 ", $string);

本质上它的作用是如果字符串以一个不需要的字符结尾,它会附加一个空格。

如果字符串与模式不匹配,那么preg_replace()将返回原始字符串 - 所以你仍然很好。

如果您需要展开不需要的结尾列表,可以将它们添加到字符块[\w?!]

答案 2 :(得分:1)

您可能想尝试下面的模式匹配,看看是否适合您。

<?php
    // THE REGEX BELOW MATCHES THE ENDING LOWER & UPPER-CASED CHARACTERS, DIGITS
    // AND SYMBOLS LIKE "?" AND "!" AND EVEN A DOT "."
    // HOWEVER YOU CAN IMPROVISE ON YOUR OWN
    $rxPattern  = "#([\!\?a-zA-Z0-9\.])$#"; 
    $title      = "What is your name?";
    var_dump($title);

    // AND HERE, YOU APPEND A SINGLE SPACE AFTER THE MATCHED STRING
    $title      = preg_replace($rxPattern, "$1 ", $title);
    var_dump($title);

   // THE FIRST var_dump($title) PRODUCES:
   // 'What is your name?' (length=18)

   // AND THE SECOND var_dump($title) PRODUCES
   // 'What is your name? ' (length=19) <== NOTICE THE LENGTH FROM ADDED SPACE.

您可以测试HERE

干杯...

答案 3 :(得分:0)

你需要

$title=preg_replace("/.*[\w?!]$/", "\\0 ", $title);
相关问题