我想从字符串中获得单词'minimum‘之前的第一个数字,在空格前面加上一个空格,而不是由'-’代替。示例:
我正在尝试使用以下代码:
$str = "Red QQ-4555 White TT-789 Yellow Minimum order applies. This is a test";
$explodeByMinimumArray = preg_split("/minimum/i", str_replace(array( '(', ')' ), ' ', $str));
preg_match_all('/\d+(?!-\d)/', $explodeByMinimumArray[0], $numberFromStringBeforeMinimumArray);
print_r($numberFromStringBeforeMinimumArray);这是将$numberFromStringBeforeMinimumArray返回为:
Array
(
[0] => Array
(
[0] => 4555
[1] => 789
)
)但预期的输出是空的,因为QQ-4555和TT-789前面有一些字符.
有人能帮我解决这个问题吗?提前谢谢。
发布于 2018-03-06 11:16:09
您需要使用负查找,以确保不匹配前面有字母/数字和-的数字。
(?<![\p{L}\d]-|\d)\d+(?!-\d)见regex演示。
详细信息
(?<![\p{L}\d]-|\d) -如果在当前位置的左边有一个字母或数字紧跟-或单个数字,则负查找失败。\d+ - 1+数字(?!-\d) -如果在当前位置的右侧有一个-,然后有一个数字,则一个负的前瞻将使匹配失败。发布于 2018-03-06 11:16:35
$str = "Red QQ-4555 White TT-789 123 Yellow Minimum order applies. This is a test ";
$explodeByMinimumArray = preg_split("/minimum/i", str_replace(array( '(', ')' ), ' ', $str));
preg_match_all('/\s+\d+(?!-\d)/', $explodeByMinimumArray[0], $numberFromStringBeforeMinimumArray);
print_r($numberFromStringBeforeMinimumArray);会给
Array
(
[0] => Array
(
[0] => 123
)
)发布于 2018-03-06 11:21:46
您可以使用多个查找断言来使用此正则表达式:
(?<=\s)\d+\b(?!-\d+)(?=.*Minimum)解释:
(?<=\s):负后视以断言我们在前一个位置有一个空格\d+\b:匹配1+数字,后面跟着单词边界断言(?!-\d+):否定的前瞻性断言我们没有-<digits>在前面(?=.*Minimum):前瞻性断言我们前面有Minimum文本https://stackoverflow.com/questions/49129323
复制相似问题