1

我知道 strlen 用于确定字符串长度 - 但是否可以搜索整个文本块并提取正好 8 个字符长的字符串?

4

3 回答 3

8

以下假设“字符串正好八个字符长”您的意思是“单词”,例如在文本中

$blockOfText = <<< TXT
codepad is an online compiler/interpreter, and a simple collaboration tool.
Paste your code below, and codepad will run it and give you a short URL you 
can use to share it in chat or email. 
TXT;

你只想找到“编译器”这个词。


非正则表达式解决方案(演示):

print_r(
    array_filter(
        str_word_count($blockOfText, 1),
        function($word) { return strlen($word) === 8; }
    )
);

参考:


正则表达式解决方案(演示):

preg_match_all(
    '(
        \b     # match from a word boundary
        \w{8}  # followed by exactly 8 "word" characters
        \b     # followed by a word boundary
    )x', 
    $blockOfText, 
    $matches
);
print_r($matches[0]);

“单词”字符是任何字母或数字或下划线字符,即任何可以成为 Perl “单词”一部分的字符。字母和数字的定义由 PCRE 的字符表控制,并且如果发生特定于语言环境的匹配,可能会有所不同。例如,在“fr”(法语)语言环境中,一些大于 128 的字符代码用于重音字母,这些字符由 \w 匹配。

参考:

于 2012-05-24T10:24:52.030 回答
1

使用explode()preg_split()通过分隔符拆分字符串并遍历结果数组并使用strlen().

简单示例,查找长度为 2 的所有内容:

$string = "abcd ab abc abd ad";
$array = explode(' ', $string);
foreach ($array as $part) {
    if (strlen($part) == 2) {
        echo '"' . $part . '" has a length of 2<br />';
    }
}
于 2012-05-24T10:24:28.490 回答
1
preg_match_all("/\b[a-zA-Z]{8}\b/", $sText, $aMatches);
$aWords = $aMatches[0];

另请参阅此示例

于 2012-05-24T10:27:40.897 回答