Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.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/8/linq/3.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_Preg Match - Fatal编程技术网

Php 正则表达式以查找特定长度的数字,但包含除前面或后面的数字以外的任何字符

Php 正则表达式以查找特定长度的数字,但包含除前面或后面的数字以外的任何字符,php,regex,preg-match,Php,Regex,Preg Match,我正在尝试使用正则表达式模式来搜索字符串中的12位数字。这个数字可以有任意数量的其他字符,但不能在我要找的字符的前面或后面 到目前为止,我有/[0-9]{12}/它可以正确地找到12位数字,但是它也会匹配字符串中的13位数字 模式应与以下字符串上的123456789012匹配 RGERGIU123456789012 ERGEWRG 123456789012 123456789012 ERGERGERWG ERGEWRG\n ERGERGEWRGREWG regewrge 123456789012

我正在尝试使用正则表达式模式来搜索字符串中的12位数字。这个数字可以有任意数量的其他字符,但不能在我要找的字符的前面或后面

到目前为止,我有/[0-9]{12}/它可以正确地找到12位数字,但是它也会匹配字符串中的13位数字

模式应与以下字符串上的123456789012匹配

RGERGIU123456789012 ERGEWRG 123456789012 123456789012 ERGERGERWG ERGEWRG\n ERGERGEWRGREWG regewrge 123456789012 ERGEWRG 它不应与以下字符串匹配:

123456789012000 egjkrgkergr 123123456789012
你想要的是四处看看。比如:

/(?<![0-9])[0-9]{12}(?![0-9])/

如果模式前面或后面有另一个模式,则前向或后向匹配,而不使用该模式。因此,仅当12位数字的前面或后面没有更多的数字时,此模式才会匹配12位数字,而不会使用数字前后的字符。

您需要的是环顾四周。比如:

/(?<![0-9])[0-9]{12}(?![0-9])/
如果模式前面或后面有另一个模式,则前向或后向匹配,而不使用该模式。因此,仅当12位数字前面或后面没有更多的数字时,此模式才会匹配12位数字,而不会使用数字前后的字符。

/\D\D{12}\D/在这种情况下,数字将是捕获索引1

编辑:哎哟,如果数字是整个字符串,那么这个不起作用。使用下面的一个代替

或者,用消极的回顾和展望:/?其中编号将为捕获索引0

其中$string是您正在测试的文本

/\D\D{12}\D/在这种情况下,数字将是捕获索引1

编辑:哎哟,如果数字是整个字符串,那么这个不起作用。使用下面的一个代替

或者,用消极的回顾和展望:/?其中编号将为捕获索引0


其中$string是您正在测试的文本

可以帮助您测试正则表达式。可以帮你测试正则表达式。谢谢你的编辑。我并没有像我应该关注的那样多:pBrilliant,谢谢你的解释,regex对我来说只是开始不像黑魔法了:嘿,谢谢你的编辑。我没有给予应有的重视:pBrilliant,谢谢你的解释,regex对我来说只是开始不像黑魔法了:d和[0-9]之间的区别有什么好处吗?如果它们几乎都是同义词,我个人认为[0-9]更容易阅读,它们只是同义词\d表示数字,而\d表示非数字,因此它们具有助记功能且相对容易记忆。但除了缩短表达式之外,没有什么好处。@ZakHenry它们是一样的,但我习惯于\d并且我个人认为它更可读,因为它是两个字符而不是五个字符:-\d和[0-9]之间的差异有什么好处吗?如果它们几乎都是同义词,我个人认为[0-9]更容易阅读,它们只是同义词\d表示数字,而\d表示非数字,因此它们具有助记功能且相对容易记忆。但除了缩短表达式之外,没有什么好处。@ZakHenry它们是一样的,但我习惯于\d并且我个人认为它更可读,因为它是两个字符而不是五个字符:-