2015-10-19 5 views
0

Прямо сейчас у меня есть регулярное выражение, и я хочу изменить одну часть регулярного выражения.Соответствие всех символов, кроме пробелов в regex

(.{3,}?) ~ 

^--- Эта часть кода, где он говорит, (любые символы, которые 3 или более в длину, и сопоставляет до ближайшего места), я хочу, чтобы изменить его (любые символы , за исключением пробелов, которые имеют длину 3 или более и соответствуют ближайшему пространству). Как я могу сказать это в регулярном выражении?

$text = "my name is to habert"; 
$regex = "~(?:my name is |my name\\\'s |i am |i\\\'m |it is |it\\\'s |call me)?(.{3,}?) ~i"; 
preg_match($regex, $text, $match); 
print_r($match); 

Результат:

Array ([0] => my name [1] => my name) 

нужны Результат:

Array ([0] => name [1] => name) 
+2

'/ ([^] {3}) /', кажется, что вы ищете. – Ghedipunk

+0

@Ghedipunk Почему нужны квадратные скобки? Без них он не работает. – frosty

+1

Это [класс символов] (http://www.regular-expressions.info/charclass.html). '[abc]' означает совпадение с одним из a, b или c. С кареткой (^) спереди, это означает, что не соответствовать ничему, содержащемуся в этом классе символов. В этом случае это означает соответствие любой буквы, которая не является пространством. Вы можете расширить его до любого символа, который не является типом пробелов (tab, space, newline), выполнив '[^ \ s]' или '[\ S]'. – Ghedipunk

ответ

0

могильщик здесь ... Так как этот вопрос не имеет ответа еще, я буду размещать мину ,


(\S{3,}) будет работать для ваших нужд


Regex Объяснение:

( Открыть захват группы

\S Все, кроме пробельные символы (такие же, как [^\s], вы можете использовать [^ ] тоже, но лат тер работает только для пространств.)

{3,} должен содержать больше трех или символов

) Закрыть захват группы

Test it here!

+0

'[^ \ s]' и '[^]' не совпадают, '\ s' является сокращенным символьным классом для' [\ t \ r \ n \ f] '. См .: http://www.regular-expressions.info/shorthand.html. – Toto