tags:

views:

250

answers:

7

How do I have a regex statement that accepts any character except new lines. This includes anything but also includes new lines which is not what i want:

"/(.*)/"
+1  A: 

The following regular expression should match any character except newlines

/[^\n]+/
tosh
yes, except the original matches the empty string and this one requires at least one non-linebreak character... "/[^\n]*/"(and if you're on Windows, you might want to exclude \r as well...)
grossvogel
of course! thank you for correcting me
tosh
+7  A: 

The dot . does not match newlines unless you use the s modifier.

>>> preg_match("/./", "\n")
0
>>> preg_match("/./s", "\n")
1
yjerem
wow lol i was using that thanks :D
David
+3  A: 

As written on the PHP Documentation page on Preg Modifiers, a dot . does NOT include newlines, only when you use the s modifier. Source

Douwe Maan
A: 

this is strange, because by default the dot (.) does not accept newlines. Most probably you have a "\r" (carriage return) character there, so you need to eliminate both: /[^\r\n]/

ah, you were using /s

stereofrog
+1  A: 

The default behavior shouldn't match a new line. Because the "s" modifier is used to make the dot match all characters, including new lines. Maybe you can provide an example to look at?

Savageman
A: 
#!/usr/bin/env php
<?php

$test = "Some\ntest\nstring";

// Echos just "Some"
preg_match('/(.*)/', $test, $m);
echo "First test: ".$m[0]."\n";

// Echos the whole string.
preg_match('/(.*)/s', $test, $m);
echo "Second test: ".$m[0]."\n";

So I don't know what is wrong with your program, but it's not the regex (unless you have the /s modifier in your actual application.

Matthew Scharley
A: 

I try to use /s. It works great when there is a newline in the string, but returns nothing when not. I am trying to get the page title of out the source with

$pattern = '/(.*)<\/title>/s'; preg_match($pattern , $html-source, $matches);

What would be a better preg_mach for getting the title?

Meg Lepett
That's a totally different question, not an answer to the one covered in this thread.
sth