Php 如果这个正则表达式有4位数字,是否可以修改为与字符串不匹配?
我使用下面的正则表达式来匹配@username字符串(类似于twitter的用户名匹配系统)Php 如果这个正则表达式有4位数字,是否可以修改为与字符串不匹配?,php,regex,Php,Regex,我使用下面的正则表达式来匹配@username字符串(类似于twitter的用户名匹配系统) (? 这段代码对我来说非常有效,但想排除一种特定情况:如果匹配的字符串是一组4位数字。只有4位数字。如果有3位或5位数字,那么它应该像现在一样继续匹配 例如: @8500您可以使用{min,max}语法指定正则表达式令牌的最小/最大匹配数,因此您可以使用类似这样的代码段来匹配1-3位或5位或更多位(\d),并由非数字字符(\d)包围: 您可以使用{min,max}语法指定正则表达式令牌的最小/最大匹配数
(?
这段代码对我来说非常有效,但想排除一种特定情况:如果匹配的字符串是一组4位数字。只有4位数字。如果有3位或5位数字,那么它应该像现在一样继续匹配
例如:
@8500您可以使用{min,max}
语法指定正则表达式令牌的最小/最大匹配数,因此您可以使用类似这样的代码段来匹配1-3位或5位或更多位(\d
),并由非数字字符(\d
)包围:
您可以使用{min,max}
语法指定正则表达式令牌的最小/最大匹配数,因此您可以使用这样的代码段来匹配1-3位或5位或更多位(\d
),并由非数字字符(\d
)包围:
使用负前瞻(?!…)
,可以检查以下模式在当前位置是否不匹配:
(?<![\w@])@(?!\d\d\d\d\b)([\w@]+(?:[.!][\w@]+)*)
使用负前瞻(?!…)
,可以检查以下模式在当前位置是否不匹配:
(?<![\w@])@(?!\d\d\d\d\b)([\w@]+(?:[.!][\w@]+)*)
如果((strlen($string)!=4)| |(is_int($string)==false))如果((strlen($string)!=4)| |(is_int($string)==false))我想你搞定了。谢谢!我想你搞定了。谢谢!
/\D*(\d{1,3}|\d{5,})\D*/
(?<![\w@])@(?!\d\d\d\d\b)([\w@]+(?:[.!][\w@]+)*)
<?php
function test($test) {
$pattern = '/(?<![\w@])@(?!\d\d\d\d\b)([\w@]+(?:[.!][\w@]+)*)/';
echo (preg_match($pattern, $test) ? 'Matches' : 'No match') . "\n";
}
test('Hello @test world'); // Matches
test('Hello @123 world'); // Matches
test('Hello @1234 world'); // No match
test('Hello @12345 world'); // Matches
test('Hello @test1234 world'); // Matches
test('Hello @1234test world'); // Matches
test('Hello @1234-test world'); // No match
test('Hello @1234_test world'); // Matches