Php 用于检测后跟某些字符串格式的整数的正则表达式

Php 用于检测后跟某些字符串格式的整数的正则表达式,php,regex,Php,Regex,如果字符串不是数字,我当前有以下检查要匹配 if (!ctype_digit($matching)) { } 但是,现在我想更改它,以便检测以下格式: xxxk xxxrb xxx.xxxx 或者任何数字 检测此问题的最佳正则表达式是什么?这里的X是介于0-9之间的整数/位数,可以是任意长度。例如,这里有一个有效匹配: 8k 72k 123k 899rb 20rb 5rb 160.000 1.600.218 根据要匹配的字符串,以下是正则表达式: /^\d[0-9a-z\.]+$/i

如果字符串不是数字,我当前有以下检查要匹配

if (!ctype_digit($matching)) {

}
但是,现在我想更改它,以便检测以下格式:

xxxk
xxxrb
xxx.xxxx
或者任何数字

检测此问题的最佳正则表达式是什么?这里的X是介于0-9之间的整数/位数,可以是任意长度。例如,这里有一个有效匹配:

8k
72k
123k
899rb
20rb
5rb
160.000
1.600.218

根据要匹配的字符串,以下是正则表达式:

/^\d[0-9a-z\.]+$/i
请记住,我添加了g和m参数,因此它将匹配每个示例

如果需要确保所有小数点后面都有3位数字,则会变得更复杂:

/^\d{1,3}(?:\.\d{3}?)*(?:[a-z]+)?$/i
更新:


现在根据所有新的示例工作。

请允许我根据我对您的格式的理解提供一个通用解决方案

在正则表达式中,您可以根据您的多种格式使用| means或so,这些格式可以用或表示如下:

x{3}k|x{3}rb|x{3}\.x{4}|\d+
每个|或代表您可能允许/评估的格式之一


由于您的帖子中没有指定x,请注意,x可以很容易地用带有[a-zA-Z]表达式的字母或带有[0-9]表达式的数字或两者的组合替换,如[a-zA-Z0-9]。

您可以使用此正则表达式:

^\d{1,3}(?:k|rb|(?:\.\d{3})+|\d+)$
php代码是:

$re = "/^\\d{1,3}(?:k|rb|(?:\\.\\d{3})+|\\d+)$/m"; 
$str = "8k\n72k\n123k\n899rb\n20rb\n5rb\n160.000\n1.600.218"; 

preg_match_all($re, $str, $matches);
您可以使用以下选项:

\A\d+(?:(?:\.\d{3})*|k|rb)\z
另一个解决方案:

\d[.\d]*(?:rb|k)?

x是任意字符还是仅仅是x?你想同时匹配整数吗?只是一个建议,但最好包括更多你想匹配的例子。e、 g.如果您想允许整数和一些特殊字符,示例可能看起来像xxx-12_4$aq,我可以问一下,是每个字符串都以xxx开头,还是那些只是占位符?这是否也意味着每个字符串至少有3个字符长?@Dalorzo x这里有一个介于0-9I之间的数字,添加了一些示例above@adit好的,我更新了我的答案以考虑新的例子。第一个表达式将进行非常广泛的搜索,并且通常是准确的;第二个表达式更严格,因为它只允许小数点后面有3位数字。但是这两种方法在你的例子中都能像预期的那样起作用。你能试着把它放到preg\u match\u all中吗,我尝试了下面的方法,但它在preg\u match\u all'/\d{1,3}中无效:k | rb |?:/\.\d{3}+\d+','Anak-Anak-kampung 120k',$matchess@平硐,这与ctype_数字匹配;我以为你不想匹配数字?i、 e.1234、9999999等@adit如果您转到我在答案上添加的链接,然后转到代码生成部分,您可以根据需要获取代码。我会用php更新我的答案code@l“L”作为OP在问题中提出的,它应该与模式和/或任何数字匹配。如果这并不意味着有任何数字,则可以通过从regex@Fede是的,这是有道理的。我最初的理解是“如果不是一个数字字符或这个模式,那么匹配”。
\d[.\d]*(?:rb|k)?