Php 使用preg_匹配分割字符串

Php 使用preg_匹配分割字符串,php,arrays,split,preg-match,preg-match-all,Php,Arrays,Split,Preg Match,Preg Match All,我有字符串: $productList=" Saluran Dua(Bothway)-(TAN007); Speedy Password-(INET PASS); Memo-(T-Memo); 7-pib r-10/10-(AM); FBI (R/N/M)-(Rr/R(A)); "; 我想要这样的结果: Array( [0]=>TAN007 [1]=>INET PASS [2]=>T-Memo [3]=>AM [4]=>Rr/R(A) ); Array (

我有字符串:

$productList="
Saluran Dua(Bothway)-(TAN007);
Speedy Password-(INET PASS);
Memo-(T-Memo);
7-pib r-10/10-(AM);
FBI (R/N/M)-(Rr/R(A));
";
我想要这样的结果:

Array(
[0]=>TAN007
[1]=>INET PASS
[2]=>T-Memo
[3]=>AM
[4]=>Rr/R(A)
);
Array
(
    [0] => TAN007
    [1] => INET PASS
    [2] => T-Memo
    [3] => AM
    [4] => Rr/R(A)
)
我用过:

$separator = '/\-\(([A-z ]*)\)/';
preg_match_all($separator, $productList, $match);
$value=$match[1];
但结果是:

Array(
[0]=>INET PASS
[1]=>AM
);
一定是有错误的代码,有人能帮上忙吗?

试试这个正则表达式

$separator = '#\-\(([A-Za-z0-9/\-\(\) ]*)\)#';
试试这个正则表达式

$separator = '#\-\(([A-Za-z0-9/\-\(\) ]*)\)#';
试试这个正则表达式

$separator = '#\-\(([A-Za-z0-9/\-\(\) ]*)\)#';
试试这个正则表达式

$separator = '#\-\(([A-Za-z0-9/\-\(\) ]*)\)#';

对于第1行,您需要0-9

对于第三条生产线,您需要一个

在最后一行中,您需要() 试试这个

 #\-\(([a-zA-Z/0-9(\)\- ]*)\)#

对于第1行,您需要0-9

对于第三条生产线,您需要一个

在最后一行中,您需要() 试试这个

 #\-\(([a-zA-Z/0-9(\)\- ]*)\)#

对于第1行,您需要0-9

对于第三条生产线,您需要一个

在最后一行中,您需要() 试试这个

 #\-\(([a-zA-Z/0-9(\)\- ]*)\)#

对于第1行,您需要0-9

对于第三条生产线,您需要一个

在最后一行中,您需要() 试试这个

 #\-\(([a-zA-Z/0-9(\)\- ]*)\)#

您的
regex
不包括要捕获的文本中可能出现的所有字符

正确的
regex
是:

$match = array();
preg_match_all('/-\((.*)\);/', $productList, $match);
说明(从内到外):

  • *
    匹配任何内容
  • (.*)
    是上面放在括号中的表达式,用于捕获
    $match[1]
    中的匹配项
  • -\(.*)
    是上下文中的上述内容:如果前面是
    -(
    ,后面是
    ),则匹配;括号被转义以使用它们的文字值,而不是它们的特殊
    regex
    解释
  • 在正则表达式中不需要转义
    -
    ;只有在字符范围内使用(
    [A-Z]
    ,f.e.)时,它才有特殊的解释,但即使在字符范围内,如果破折号(
    -
    )正好在
    [
    之后或
    ]
    之前,它也没有特殊的含义;e、 g.
    [-A-Z]
    指破折号(
    -
    )或任何大写字母(
    A
    Z
现在,
print_r($match[1])如下所示:

Array(
[0]=>TAN007
[1]=>INET PASS
[2]=>T-Memo
[3]=>AM
[4]=>Rr/R(A)
);
Array
(
    [0] => TAN007
    [1] => INET PASS
    [2] => T-Memo
    [3] => AM
    [4] => Rr/R(A)
)

您的
regex
不包括要捕获的文本中可能出现的所有字符

正确的
regex
是:

$match = array();
preg_match_all('/-\((.*)\);/', $productList, $match);
说明(从内到外):

  • *
    匹配任何内容
  • (.*)
    是上面放在括号中的表达式,用于捕获
    $match[1]
    中的匹配项
  • -\(.*)
    是上下文中的上述内容:如果前面是
    -(
    ,后面是
    ),则匹配;括号被转义以使用它们的文字值,而不是它们的特殊
    regex
    解释
  • 在正则表达式中不需要转义
    -
    ;只有在字符范围内使用(
    [A-Z]
    ,f.e.)时,它才有特殊的解释,但即使在字符范围内,如果破折号(
    -
    )正好在
    [
    之后或
    ]
    之前,它也没有特殊的含义;e、 g.
    [-A-Z]
    指破折号(
    -
    )或任何大写字母(
    A
    Z
现在,
print_r($match[1])如下所示:

Array(
[0]=>TAN007
[1]=>INET PASS
[2]=>T-Memo
[3]=>AM
[4]=>Rr/R(A)
);
Array
(
    [0] => TAN007
    [1] => INET PASS
    [2] => T-Memo
    [3] => AM
    [4] => Rr/R(A)
)

您的
regex
不包括要捕获的文本中可能出现的所有字符

正确的
regex
是:

$match = array();
preg_match_all('/-\((.*)\);/', $productList, $match);
说明(从内到外):

  • *
    匹配任何内容
  • (.*)
    是上面放在括号中的表达式,用于捕获
    $match[1]
    中的匹配项
  • -\(.*)
    是上下文中的上述内容:如果前面是
    -(
    ,后面是
    ),则匹配;括号被转义以使用它们的文字值,而不是它们的特殊
    regex
    解释
  • 在正则表达式中不需要转义
    -
    ;只有在字符范围内使用(
    [A-Z]
    ,f.e.)时,它才有特殊的解释,但即使在字符范围内,如果破折号(
    -
    )正好在
    [
    之后或
    ]
    之前,它也没有特殊的含义;e、 g.
    [-A-Z]
    指破折号(
    -
    )或任何大写字母(
    A
    Z
现在,
print_r($match[1])如下所示:

Array(
[0]=>TAN007
[1]=>INET PASS
[2]=>T-Memo
[3]=>AM
[4]=>Rr/R(A)
);
Array
(
    [0] => TAN007
    [1] => INET PASS
    [2] => T-Memo
    [3] => AM
    [4] => Rr/R(A)
)

您的
regex
不包括要捕获的文本中可能出现的所有字符

正确的
regex
是:

$match = array();
preg_match_all('/-\((.*)\);/', $productList, $match);
说明(从内到外):

  • *
    匹配任何内容
  • (.*)
    是上面放在括号中的表达式,用于捕获
    $match[1]
    中的匹配项
  • -\(.*)
    是上下文中的上述内容:如果前面是
    -(
    ,后面是
    ),则匹配;括号被转义以使用它们的文字值,而不是它们的特殊
    regex
    解释
  • 在正则表达式中不需要转义
    -
    ;只有在字符范围内使用(
    [A-Z]
    ,f.e.)时,它才有特殊的解释,但即使在字符范围内,如果破折号(
    -
    )正好在
    [
    之后或
    ]
    之前,它也没有特殊的含义;e、 g.
    [-A-Z]
    指破折号(
    -
    )或任何大写字母(
    A
    Z
现在,
print_r($match[1])如下所示:

Array(
[0]=>TAN007
[1]=>INET PASS
[2]=>T-Memo
[3]=>AM
[4]=>Rr/R(A)
);
Array
(
    [0] => TAN007
    [1] => INET PASS
    [2] => T-Memo
    [3] => AM
    [4] => Rr/R(A)
)

将数字
0-9
和破折号
-
添加到regexp将数字
0-9
和破折号
-
添加到regexp将数字
0-9
和破折号
-
添加到regexp
[A-z]
包括
A
z
之间的所有字符。从中可以看到,它包含
A
Z
A
Z
和其他6个字符:
[
`,
]
^
`和backquote[`]。