Php pcre正则表达式 - 用反斜杠分割文本

我需要这个字符串:“test1 test2-test3 \ test4”分为4个字符串:</ p>

  Array 

[0] =&gt; test1
[1] =&gt; test2
[2] =&gt; test3
[3] =&gt; test4


</ code> </ pre>

我做错了什么? </ p>

我试过这个:</ p>

 &lt;?php 

$ aa ='test1 test2-test3 \ test4' ;
$ arr = preg_split('#[\ s | \ | - ] + #u',$ aa);
print_r($ arr);

?&gt;
Array

[ 0] =&gt; test1
[1] =&gt; test2
[2] =&gt; test3 \ test4

</ code> </ pre>

这个:< / p>

 &lt;?php 

$ aa ='test1 test2-test3 \ test4';
$ arr = preg_split('#[\ s | \ | - ] +#u',$ aa);
print_r($ arr);

?&gt;
Array

[0] =&gt; test1
[1] =&gt; test2
[2] =&gt; test3 \ test4

</ code> </ pre>

无济于事。 出于某种原因,它不会被反斜杠分开 - 为什么? </ p>
</ div>

展开原文

原文

I need this string: "test1 test2-test3\test4" to be split into 4 strings:

Array
(
    [0] => test1
    [1] => test2
    [2] => test3
    [3] => test4
)

What am I doing wrong?

I've tried this:

<?php

    $aa = 'test1 test2-test3\test4';
    $arr = preg_split('#[\s|\|-]+#u', $aa);
    print_r($arr);

?>
Array
(
    [0] => test1
    [1] => test2
    [2] => test3\test4
)

And this:

<?php

    $aa = 'test1 test2-test3\test4';
    $arr = preg_split('#[\s|\\|-]+#u', $aa);
    print_r($arr);

?>
Array
(
    [0] => test1
    [1] => test2
    [2] => test3\test4
)

To no avail. For some reason it doesn't split by backslash- why?

douji8017
douji8017 PHP正则表达式模式中需要额外的反斜杠
6 年多之前 回复

5个回答



尝试三个斜杠 \ </ code>:</ p>

  $ arr  = preg_split('#[\ s | \\ |  - ] + #u',$ aa); 
</ code> </ pre>

您不需要更改 字符类:</ p>

  $ arr = preg_split('#[\ s \\  - ] + #u',$ aa); 
</ code> </ pre>
</ div>

展开原文

原文

Try three slashes \:

    $arr = preg_split('#[\s|\\\|-]+#u', $aa);

And you don't need the alternation in the character class:

    $arr = preg_split('#[\s\\\-]+#u', $aa);

dongqing904999
dongqing904999 我在答案后在评论中发布了一个链接。 似乎在某些或所有情况下,4 \\\\是最正确的。
6 年多之前 回复
douban2014
douban2014 疑难杂症。 获胜的额外反斜杠。
6 年多之前 回复



您不需要在字符类中放置管道。</ p>

您可以使用:< / p>

  $ aa ='test1 test2-test3 \ test4'; 
$ arr = preg_split('#[ - \ s \\] + #u',$ aa );
print_r($ arr);
</ code> </ pre>

OUTPUT:</ h3>

  Array 

[0 ] =&gt; test1
[1] =&gt; test2
[2] =&gt; test3
[3] =&gt; test4

</ code> </ pre>
</ div >

展开原文

原文

You don't need to place pipe inside character class.

You can use:

$aa = 'test1 test2-test3\test4';
$arr = preg_split('#[-\s\\\\]+#u', $aa);
print_r($arr);

OUTPUT:

Array
(
    [0] => test1
    [1] => test2
    [2] => test3
    [3] => test4
)

dongxing8009
dongxing8009 Pipe也被视为字符类中的文字管道,而不是OR。
6 年多之前 回复
du512926
du512926 哇 。 不知道这个:) +1
6 年多之前 回复



使用此.. </ p>

  $ arr = preg_split('#[\ s  | \\ |  - ] +#u',$ aa);

^^ //&lt; --------------再添加两个反斜杠
</ code> </ pre>

OUTPUT :</ code> </ strong> </ p>

  Array 

[0] =&gt; test1
[1] =&gt; test2
[2] =&gt; test3
[3] =&gt; test4

</ code> </ pre>

</ p>
</ div>

展开原文

原文

Use this ..

  $arr = preg_split('#[\s|\\\|-]+#u', $aa);         
                           ^^ //<-------------- Add two more backslashes      

OUTPUT :

Array
(
    [0] => test1
    [1] => test2
    [2] => test3
    [3] => test4
)

enter image description here



你的第一个错误不是错误,但看起来很奇怪。 您不需要在字符类 [] </ code>中放置管道( | </ code>)。 只需将字符放在 [] </ code> </ p>

中如果你正在处理反斜杠,那么你必须使用几个斜杠,一个用于斜杠本身,另外两个用于 转义字符。</ p>

这里基于以上几行:</ p>

  $ arr = preg_split('#[\ s \\  - ] + #u',$ aa); 
</ code> </ pre>
</ div>

展开原文

原文

Your first mistake is not an error, but it looks odd. You do not need to place pipe(|) inside the character class []. Simply place the character inside []

If you are dealing with backslash, then you have to use several slashes, one for the slash itself, and another two for the escape character.

Here it is based on above lines:

$arr = preg_split('#[\s\\\-]+#u', $aa);



尝试(\ w +)</ code>? 它似乎完全符合您在debuggex中的需求。 点击查看演示。</ p>

 (\ w +)
</ code> </ pre>

</ p>

Debuggex演示 </ p>
</ div>

展开原文

原文

Try (\w+)? It seems to do exactly what you need in debuggex. Click through to see demo.

(\w+)

Regular expression visualization

Debuggex Demo

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问