php 单独的文本但体贴的逗号作为单词
php separate text but considerate comma as word
我想获取此文本的每个单词,但需要将逗号视为单独的单词,在 PHP 中:
我输入的文字:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
我想要的数组:
array[0] => "Lorem"
array[1] => "ipsum"
array[2] => "dolor"
array[3] => "sit"
array[4] => "amet"
array[5] => ","
array[6] => "consectetuer"
array[7] => "adipiscing"
array[8] => "elit"
array[9] => "."
我用 explode(" ", $text)
得到的是:
array[0] => "Lorem"
array[1] => "ipsum"
array[2] => "dolor"
array[3] => "sit"
array[4] => "amet,"
array[5] => "consectetuer"
array[6] => "adipiscing"
array[7] => "elit."
你能帮帮我吗?
TIA
您可以将逗号替换为 space+逗号+space ',' -> ', '
$newSentence = str_replace("," , " , " , $theSentence);
$arr = preg_split('/[\s]+/', $newSentence);
试试下面,
preg_match_all('/([\w]+)([\,\.])?/', "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.",$match);
$arr = array_merge($match[1],array_filter($match[2]));
print_r($arr);
您应该使用 preg_match_all()
而不使用任何捕获组或环视以获得最佳效率。
代码:(Demo)
$string='Lorem ipsum dolor sit amet, consectetuer adipiscing elit.';
var_export(preg_match_all('/[a-z]+|\S/i',$string,$out)?$out[0]:'fail');
输出:
array (
0 => 'Lorem',
1 => 'ipsum',
2 => 'dolor',
3 => 'sit',
4 => 'amet',
5 => ',',
6 => 'consectetuer',
7 => 'adipiscing',
8 => 'elit',
9 => '.',
)
\w
可用于匹配 a-z
、A-Z
、0-9
和 _
,但在您的示例中仅存在字母。
如果包含撇号,您可以使用 $pattern='/[a-z\']+|\S/i'
,但未来的调整由您决定。
第二个选项中的 \S
是任何非空白字符 -- 这会收集第一个选项允许通过的所有标点字符(一次一个)。
模式上的 i
标志指示 [a-z]
的行为类似于 [A-Za-z]
。
我想获取此文本的每个单词,但需要将逗号视为单独的单词,在 PHP 中:
我输入的文字:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
我想要的数组:
array[0] => "Lorem"
array[1] => "ipsum"
array[2] => "dolor"
array[3] => "sit"
array[4] => "amet"
array[5] => ","
array[6] => "consectetuer"
array[7] => "adipiscing"
array[8] => "elit"
array[9] => "."
我用 explode(" ", $text)
得到的是:
array[0] => "Lorem"
array[1] => "ipsum"
array[2] => "dolor"
array[3] => "sit"
array[4] => "amet,"
array[5] => "consectetuer"
array[6] => "adipiscing"
array[7] => "elit."
你能帮帮我吗? TIA
您可以将逗号替换为 space+逗号+space ',' -> ', '
$newSentence = str_replace("," , " , " , $theSentence);
$arr = preg_split('/[\s]+/', $newSentence);
试试下面,
preg_match_all('/([\w]+)([\,\.])?/', "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.",$match);
$arr = array_merge($match[1],array_filter($match[2]));
print_r($arr);
您应该使用 preg_match_all()
而不使用任何捕获组或环视以获得最佳效率。
代码:(Demo)
$string='Lorem ipsum dolor sit amet, consectetuer adipiscing elit.';
var_export(preg_match_all('/[a-z]+|\S/i',$string,$out)?$out[0]:'fail');
输出:
array (
0 => 'Lorem',
1 => 'ipsum',
2 => 'dolor',
3 => 'sit',
4 => 'amet',
5 => ',',
6 => 'consectetuer',
7 => 'adipiscing',
8 => 'elit',
9 => '.',
)
\w
可用于匹配 a-z
、A-Z
、0-9
和 _
,但在您的示例中仅存在字母。
如果包含撇号,您可以使用 $pattern='/[a-z\']+|\S/i'
,但未来的调整由您决定。
第二个选项中的 \S
是任何非空白字符 -- 这会收集第一个选项允许通过的所有标点字符(一次一个)。
模式上的 i
标志指示 [a-z]
的行为类似于 [A-Za-z]
。