PHP中3到16个字符之间的单词的正则表达式

fri*_*iwi 3 php regex

我对正则表达式完全不熟悉,我需要从文本中过滤掉至少3个字符(最大值为16)的所有单词.(所以我可以将这些数据输入MySQL数据库)

目前,除正则表达式外,一切正常:

/^.{3,16}$/
Run Code Online (Sandbox Code Playgroud)

(我是用谷歌发现的教程构建的;-))

谢谢!伊凡

样本数据:

rjm1986 * SinuhePalma * excel2010 * Jimineedles * 209663603 * C6A7XR * Snojog * XmafiaX * Cival2 * HitmanPirrie * MAX * 4163016 * Dredd23 * Daddy420 * mattpauley * Mykillurdeath * 244833585 * KCKnight * Greystoke * Fatbastard * Fucku4 * Davkar * Banchy2 * ET187 * Slayr69 * Nik1236 * SeriousAl * 315791 * 216996334 * K1ra * Koops1 * LastFallout * zmileben * bismark * Krlssi * FuckOff1 * 1owni * Ulme * Rxtvjq * halfdeadman * Jamacola * LBTG1008 * toypark * Magicman6497 * Tyboe187 * Bob187 * Zetrox
Run Code Online (Sandbox Code Playgroud)

PHP代码(是的,我知道 - 它有点草率 - 这只用于生成查询...)

<?php
    //regexer.php

    $text = @$_REQUEST['fText'];
    if ($text == '') {
?>
<form method="post" action="">
    <input type="text" name="regex" />
    <textarea name="fText"></textarea>
    <br />
    <input type="submit"></input>
</form>
<?php 
    } else {
        preg_match_all($_REQUEST['regex'], $_REQUEST['fText'], $matches);
        header ("Content-type: text/plain");
        foreach ($matches as $match) {
            //print_r($match);
            echo ("INSERT INTO maf_codes (Code, GameID) VALUES ('$match', %GAMEID%);\n");
        }
    }
?>
Run Code Online (Sandbox Code Playgroud)

找到一个解决方案:用正则表达式替换$ _REQUEST ['regex'],确实有效;)

Asa*_*aph 5

试试这个:

/\b\w{3,16}\b/
Run Code Online (Sandbox Code Playgroud)

解释:

  • \b 匹配单词边界
  • \w 匹配单词字符
  • {3,16}适用于\w,它表示应匹配至少3个,最多16个字符.

仅供参考:我从您在问题中记下的正则表达式中省略了起始锚点(^)和结束锚点($),因为您似乎希望找到具有较长文本字符串的匹配作为输入,并且锚点会将匹配限制为仅限于整个输入字符串匹配.

更新:

以下是此正则表达式的工作原理:

<?php

$input = 'rjm1986 * SinuhePalma * excel2010 * Jimineedles * 209663603 * C6A7XR * Snojog * XmafiaX * Cival2 * HitmanPirrie * MAX * 4163016 * Dredd23 * Daddy420 * mattpauley * Mykillurdeath * 244833585 * KCKnight * Greystoke * Fatbastard * Fucku4 * Davkar * Banchy2 * ET187 * Slayr69 * Nik1236 * SeriousAl * 315791 * 216996334 * K1ra * Koops1 * LastFallout * zmileben * bismark * Krlssi * FuckOff1 * 1owni * Ulme * Rxtvjq * halfdeadman * Jamacola * LBTG1008 * toypark * Magicman6497 * Tyboe187 * Bob187 * Zetrox';

$matches = array();

preg_match_all('/\b\w{3,16}\b/', $input, $matches);

print_r($matches);

?>
Run Code Online (Sandbox Code Playgroud)

输出:

Array
(
    [0] => Array
        (
            [0] => rjm1986
            [1] => SinuhePalma
            [2] => excel2010
            [3] => Jimineedles
            [4] => 209663603
            [5] => C6A7XR
            [6] => Snojog
            [7] => XmafiaX
            [8] => Cival2
            [9] => HitmanPirrie
            [10] => MAX
            [11] => 4163016
            [12] => Dredd23
            [13] => Daddy420
            [14] => mattpauley
            [15] => Mykillurdeath
            [16] => 244833585
            [17] => KCKnight
            [18] => Greystoke
            [19] => Fatbastard
            [20] => Fucku4
            [21] => Davkar
            [22] => Banchy2
            [23] => ET187
            [24] => Slayr69
            [25] => Nik1236
            [26] => SeriousAl
            [27] => 315791
            [28] => 216996334
            [29] => K1ra
            [30] => Koops1
            [31] => LastFallout
            [32] => zmileben
            [33] => bismark
            [34] => Krlssi
            [35] => FuckOff1
            [36] => 1owni
            [37] => Ulme
            [38] => Rxtvjq
            [39] => halfdeadman
            [40] => Jamacola
            [41] => LBTG1008
            [42] => toypark
            [43] => Magicman6497
            [44] => Tyboe187
            [45] => Bob187
            [46] => Zetrox
        )

)
Run Code Online (Sandbox Code Playgroud)