Вот одно регулярное выражение, которое делает то, что вы хотите (запустить его в многострочном режиме)
^\s*\*\s*@license(?:(?!\s*\*/)[\s\S])+
Соответствует пораженной части:
/*
* @copyright
<strike> * @license
*</strike>
*/
Объяснение:
^ ~ start-of-string
\s* ~ any number of white space
\* ~ a literal star
\s* ~ any number of white space
@license ~ the string "@license"
(?: ~ non-capturing group
(?! ~ negative look ahead (a position not followed by...):
\s* ~ any number of white space
\* ~ a literal star
/ ~ a slash
) ~ end lookahead (this makes it stop before the end-of-comment)
[\s\S] ~ match any single character
)+ ~ end group, repeat as often as possible
Обратите внимание, что регулярное выражение по-прежнему необходимо экранировать в соответствии с строковыми правилами PHP и в соответствии с правилами preg_replace()
.
РЕДАКТИРОВАТЬ: если вам это нравится -сделайте абсолютно уверенным , что после сопоставленного текста действительно есть маркер конца комментария, регулярное выражение можно расширить следующим образом:
^\s*\*\s*@license(?:(?!\s*\*/)[\s\S])+(?=\s*\*/)
↑ positve look ahead for
+-----------an end-of-comment marker