如何检测一定数量的连续字符并在其后面加一个空格

时间:2015-08-13 21:04:47

标签: php regex

我有一个 textarea 并希望在插入数据库之前检查它:检测20个集成字符并在第20个字符后面添加一个空格。

以下是一个例子:

$var = 'hello worlddddddddddddddddddddddddddddddddddddddd!';

我想要这个输出:

$newvar = 'hello worldddddddddddddddd dddddddddddddddddddd ddddd!';

点:所以有一点,我想禁用href内容的这种分离。例如:

$var = '<a href="www.google.commmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm">link</a>';

然后我想要一个完整的输出(因为长文本是href值)

$newvar = '<a href="www.google.commmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm">link</a>';

有可能吗?

编辑:事实上,我希望避免恶化链接并为其他所有内容留出空间。例如:

$var    = '<a href"www.google.commmmmmmmmmmmmmmmmmmmmmmmmmmmmmm">link</a>';
$newvar = '<a href"www.google.c ommmmmmmmmmmmmmmmmmm mmmmmmmmmmmm">link</ a>';

因为在=之后遗漏了href

4 个答案:

答案 0 :(得分:1)

尝试使用正则表达式:

((?<=\s)\w{19}|(?<=\G)\w{19})

DEMO 和'$ 1'

一起喋喋不休

修改 试试这个:

(<a href="[^\n]+?<\/a>|[^\s]{19}|(?<=\G)[^\s]{19}(?=[^\n]+$))

DEMO 但是它会在整个部分

之后添加空格(<a href="...."</a>

答案 1 :(得分:1)

尝试此代码,我测试它并获得正确的结果

$s = 'hello worlddddddddddddddddddddddddddddddddddddddd! <a href="www.google.commmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm">link</a>';
$array = explode(" ", $s);

$str="";
foreach ($array as $value)
{
    if (!preg_match("/href/", $value))
    {
//        $subArray=preg_split("/([.]{19})/", $value);
//        print_r($subArray);
        $str.=" ";
        $str.= preg_replace('/([^\s]{19})/', '$1 ', $value);
    }else{
         $str.=" ".$value;
    }

}
echo $str;

答案 2 :(得分:0)

我认为你应该使用preg替换它。

示例:$ newvar = preg_replace('/([^ \ s] {20})/','$ 1',$ var);

这将在一行中搜索20个非空格字符,并在它们后面添加空格字符。

答案 3 :(得分:0)

你可以检查与preg_match函数匹配的正则表达式返回true或false 见here和 试试这个:

if(preg_match('/([^\s]{19})/', $var)){
preg_replace('/([^\s]{19})/', '$1 ', $var);
}