开发者

Regular Expression matching with start tag and closing tag as a new line

I've been producing a letter compilation system (to save people time after a questionaire has been filled in) and near the end of the project we've found a bug. Long story short it would take many hours to fix without this regular expression - which is why I'm asking for your fine help!

We have some text that contains the following...

"<k>This is the start of the pa开发者_JAVA技巧ragraph

This is some more of the paragraph.

And some more";

I basically need a regular expression that can search for the opening tag, "<k>", and also the first new line it comes across "\r\n"? and then insert the contents into a variable I can then use (with the <k> removed but the new line codes, "\r\n", left in place).

I'm using PHP and the text (like the example above) is stored in MySQL.

Please help!

I promise I'll learn these properly after I've fixed this bug! :)


If you are using 5.3 you can make some use of closures like this:

$text = "<k>This is the start of the paragraph

This is some more of the paragraph.

And some more";

$matches = array();

$text = preg_replace_callback('/<k>(.*)$/m', function($match) use (&$matches){
    $matches[] = $match[1];
}, $text);

var_dump($text,$matches);

Output is:

string '

This is some more of the paragraph.

And some more' (length=52)
array
  0 => string 'This is the start of the paragraph' (length=34)

I'm assuming there could be multiple <k> tags in the text, and therefore, I put all the text that follows the tag into an array called matches.

As a further example... with the following input:

$text = "<k>This is the start of the paragraph
Line 2 doesn't have a tag...
This is some more <k>of the paragraph.
Line 4 doesn't have a tag...
<k>And some more";

The output is:

string '
Line 2 doesn't have a tag...
This is some more 
Line 4 doesn't have a tag...
' (length=78)
array
  0 => string 'This is the start of the paragraph' (length=34)
  1 => string 'of the paragraph.' (length=17)
  2 => string 'And some more' (length=13)


/^<k>(\w*\s+)$/

would probably work.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜