将PHP preg_match与括号一起使用()

时间:2015-12-16 11:07:56

标签: php regex preg-match-all

我正在尝试编写正则表达式以匹配最多包含2个数字的字符串,并且不包含%=等特定符号:

my name is jojo -> catch all

my name is jojo i'm 20 years old -> catch all

my name is jojo i'm 20 years old and 6 miles away -> catch all

blablabla 40% my name is jojo -> should only catch "my name is jojo"

事实是我无法在正则表达式中使用|()结合使用: 我现在正试图做这样的事情,但它不起作用......:

preg_match_all("/(([^0-9=%]|\r\n|\s){10,}[0-9,.]*){2}/",$string,$match);

提前感谢您的帮助。约翰尼拉

1 个答案:

答案 0 :(得分:0)

  

我现在正试图做这样的事情,但它不起作用......:

preg_match_all("/(([^0-9=%]|\r\n|\s){10,}[0-9,.]*){2}/",$string,$match);

离解决方案不远。比较:

$strings = array("my name is jojo",
                 "my name is jojo i'm 20 years old",
                 "my name is jojo i'm 20 years old and 6 miles away",
                 "blablabla 40% my name is jojo");
foreach ($strings as $string)
{
    preg_match_all("/([^0-9=%\s]\s?){10,}([0-9,.]+[^0-9=%]*){0,2}/", $string, $match);
    print_r($match[0]);
}
  • ([^0-9=%\s]\s?){10,}这匹配至少10个非数字 - 也不 - %= - 也 - 空格字符,每个字符后面都可以跟空格。
  • ([0-9,.]+[^0-9=%]*){0,2}这个匹配最多2个数字,每个数字后面跟着其他允许的字符。