Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式模式差异-“*”和“+”_Php_Regex_Repeat - Fatal编程技术网

Php 正则表达式模式差异-“*”和“+”

Php 正则表达式模式差异-“*”和“+”,php,regex,repeat,Php,Regex,Repeat,我正在尝试更换英寸,即12英寸的墙壁将变成12英寸的墙壁 我有两种工作模式: /\b([0-9]+)"/ -> preg_replace('/\b([0-9]+)"/', '$1 inch ', $string) 及 那么它们之间的区别是什么,为什么+和*在这里的工作方式相同 干杯, /Marcin/\b[0-9]+//要求单词边界和之间至少有一位数字,而/\b[0-9]*/也接受零位。因此,第一个不匹配后跟的空格,第二个匹配 如果您想同时使用new 15 tv和new 15 tv,则需

我正在尝试更换英寸,即12英寸的墙壁将变成12英寸的墙壁

我有两种工作模式:

/\b([0-9]+)"/ -> preg_replace('/\b([0-9]+)"/', '$1 inch ', $string)

那么它们之间的区别是什么,为什么+和*在这里的工作方式相同

干杯, /Marcin

/\b[0-9]+//要求单词边界和之间至少有一位数字,而/\b[0-9]*/也接受零位。因此,第一个不匹配后跟的空格,第二个匹配

如果您想同时使用new 15 tv和new 15 tv,则需要匹配可能存在或不存在的空格字符:

/\b([0-9]+)\s?"/
这与单词边界相匹配,后跟一个或多个数字的序列,可选地后跟一个空格或制表符,后跟一个字符。我想这就是你要找的。
如果不匹配,则应首先定义必须匹配的字符串和可能不匹配的字符串。

表示查找上一个字符/组1次或多次


*表示查找上一个字符/组任意次数0到无穷大

你知道*和+的意思吗?没有一个是这样的,即新15 TV不会被这些模式中的任何一个所取代。我可能误解了\b,但是如果你想同时匹配新15 TV和新15 TV,你不需要单词边界。我将更新我的答案。15将不匹配,因为您不允许使用空格,我建议使用[0-9]+\s?\-注意\s?,这意味着可选空格耶,我需要在前面有一个单词边界,以避免MPN16754问题是,这些图案效果很好,我只想匹配新的15电视,但想了解为什么这两种图案之间没有差异,如果它是正常的,使用哪一个+或*在上面的例子中,它们似乎执行完全相同的功能,无法找到差异如果没有数字,则它们的行为相同;如果有数字,则两者都将与数字和引号匹配;如果引号之前没有数字,则它们将不返回匹配项。但是,如果前面有字母/单词,则带*的将与引号匹配,而带+的将不匹配。[0-9]*\new brown wall中的匹配项-但是[0-9]+\new brown wall中没有匹配项如果12是测试用例中唯一可能的匹配项,那么两者的性能确实相同。太好了,谢谢SmokeyHP,很好,也谢谢Arjan为您的hep。
/\b([0-9]+)\s?"/