首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP中3到16个字符之间的单词的正则表达式

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

Stack Overflow用户
提问于 2010-03-05 22:23:48
回答 4查看 1.7K关注 0票数 3

我对正则表达式完全陌生,我需要从文本中过滤出至少3个字符(最大长度为16)的所有单词。(这样我就可以将这些数据输入到MySQL数据库中)

目前,除了正则表达式之外,一切都可以正常工作:

代码语言:javascript
复制
/^.{3,16}$/

(我是从使用Google找到的教程中构建的;-)

谢谢!Yvan

示例数据:

代码语言:javascript
复制
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

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

代码语言:javascript
复制
<?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");
        }
    }
?>

找到了一个解决方案:将$_REQUEST' regex‘替换为regex ;)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-03-05 22:26:15

试试这个:

代码语言:javascript
复制
/\b\w{3,16}\b/

解释:

  • \b匹配单词boundary
  • \w匹配应用于\w的单词character
  • {3,16},它表示应匹配至少3个字符,最多16个字符。

仅供参考:我省略了您在问题中提到的正则表达式中的起始锚点(^)和结束锚点($),因为您似乎希望查找具有更长文本字符串作为输入的匹配,而锚点将仅限于匹配整个输入字符串的实例。

更新:

下面是这个正则表达式工作的证明:

代码语言:javascript
复制
<?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);

?>

输出:

代码语言:javascript
复制
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
        )

)
票数 5
EN

Stack Overflow用户

发布于 2010-03-05 22:27:47

你能说出到底是什么不起作用吗?但不管怎样,我认为在您的正则表达式中应该使用word boundary metacharacter \b

代码语言:javascript
复制
/\b\w{3,16}\b/

更新:它适用于我。这一点:

代码语言:javascript
复制
<?php
$a = array();

preg_match_all('/\b\w{3,16}\b/', "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", $a);

print_r($a);

给了我:

代码语言:javascript
复制
Array
(
    [0] => Array
        (
            [0] => rjm1986
            [1] => SinuhePalma
            [2] => excel2010
            [3] => Jimineedles
            [4] => 209663603
            //.... lot more here...
            [45] => Bob187
            [46] => Zetrox
        )

)

另请注意,匹配项位于结果数组的第一个条目中,因此您必须这样做:

代码语言:javascript
复制
 foreach ($matches[0] as $match) {
        print_r($match);
        //...
 }

在使用它之前,你必须声明$matches

代码语言:javascript
复制
$matches = array();
preg_match_all($_REQUEST['regex'], $_REQUEST['fText'], $matches);
票数 2
EN

Stack Overflow用户

发布于 2010-03-05 22:39:01

正如其他人所说,下面的方法可以做到这一点。

代码语言:javascript
复制
/\b\w{3,16}\b/g

您的原始代码行(下面)不起作用的原因是:

代码语言:javascript
复制
/^.{3,16}$/

  1. ^$代表一行的开始和结束。看起来你想从一行中提取单词。
  2. .将匹配任何字符,包括空格或特殊字符。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2387325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档