我正在尝试编写正则表达式以匹配最多包含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);
提前感谢您的帮助。约翰尼拉
答案 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个数字,每个数字后面跟着其他允许的字符。