正则表达式匹配字符串单词

时间:2015-09-16 18:58:36

标签: php regex

我有以下内容:

<?php

$searchExpression = 'hello there yo\'s -3 "hey"';

preg_match_all("/\"([^\]]*)\"/", $searchExpression, $exact_words);

var_dump($exact_words[1]);

echo '<br><br>';

preg_match_all("/(-\d+)/", $searchExpression, $blabla);

var_dump($blabla[1]);

这些匹配

-3
"hey"

如何匹配其他单词"hello", "there", "yo's"?这些单词可以是任何字符串单词。

2 个答案:

答案 0 :(得分:1)

您可以使用以下技巧:匹配您不想返回的内容,并使用(*SKIP)(*F)动词手动将匹配失败,然后匹配您需要的任何内容。

这是一个示例正则表达式:

(?:-\d+|"[^"]*")(*SKIP)(*F)|\S+

请参阅demo

将跳过(?:-\d+|"[^"]*")\S+将匹配所有非空白字符序列。

IDEONE Demo

$re = '/(?:-\d+|"[^"]*")(*SKIP)(*F)|\S+/'; 
$str = "hello there yo\'s -3 \"hey\""; 
preg_match_all($re, $str, $matches);
print_r($matches);

答案 1 :(得分:0)

您可以使用explode,split或preg_split。

explode使用固定字符串:

$parts = explode(' ', $string);

虽然split和preg_split使用正则表达式:

$parts = split(' +', $string);
$parts = preg_split('/ +/', $string);

基于正则表达式的拆分很有用的示例:

$string = 'hello there yo\'s -3 "hey"';
var_dump(explode(' ', $string));
var_dump(split(' +', $string));
var_dump(preg_split('/ +/', $string));