Improved performance, thanks to @nikic's new regex.

This commit is contained in:
Vasil Rangelov
2012-11-10 11:49:23 +02:00
parent 044ebd68c9
commit bbd5775f1f
@@ -62,36 +62,35 @@ class LongDescription implements \Reflector
if (null === $this->parsedContents) { if (null === $this->parsedContents) {
$this->parsedContents = preg_split( $this->parsedContents = preg_split(
'/\{ '/\{
# We want the whole tag line, but without the inline tag # "{@}" is not a valid inline tag. This ensures that
# delimiters. # we do not treat it as one, but treat it literally.
(?!@\})
# We want to capture the whole tag line, but without the
# inline tag delimiters.
(\@ (\@
# The content should not be captured, or it will appear # Match everything up to the next delimiter.
# in the result separately. [^{}]*
# Nested inline tag content should not be captured, or
# it will appear in the result separately.
(?: (?:
# Match nested inline tags. # Match nested inline tags.
(?:
# Because we did not catch the tag delimiters # Because we did not catch the tag delimiters
# earlier, we must be explicit with them here. # earlier, we must be explicit with them here.
# Notice that this also matches "{}", as a way to # Notice that this also matches "{}", as a way
# later introduce it as an escape sequence. # to later introduce it as an escape sequence.
\{(?1)?\} \{(?1)?\}
| |
# "{@}" is not a valid inline tag. This ensures that # Make sure we match hanging "{".
# having it occur inside an inline tag does not trip \{
# us up. While this is required in any event, notice
# that this is also later an escape sequence.
\{\@\}
|
# If we are not dealing with a nested inline tag,
# get the character, as long as it is not a closing
# tag delimiter.
# This is an alternative way of non-greedy matching.
[^\}]
)+ # We need to keep doing these checks for every
# character, since we never know where an inline tag
# is going to start at. The "+" ensures we are not
# treating "{@}" as a valid inline tag.
) )
\}/xuS', # Match content after the nested inline tag.
[^{}]*
)* # If there are more inline tags, match them as well.
# We use "*" since there may not be any nested inline
# tags.
)
\}/Sux',
$this->contents, $this->contents,
null, null,
PREG_SPLIT_DELIM_CAPTURE PREG_SPLIT_DELIM_CAPTURE