preg_replace определенного шаблона - PullRequest
0 голосов
/ 11 августа 2010

Я хотел бы использовать preg_replace для замены "* @license until */" на "testing".
Как я могу это сделать?
Ниже приведен мой текст:

/*
 * @copyright  
 * @license  
 *
 */

Я надеюсь, что все правильно поняли мой вопрос.

Ответы [ 2 ]

2 голосов
/ 11 августа 2010

Вот одно регулярное выражение, которое делает то, что вы хотите (запустить его в многострочном режиме)

^\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*\*/)
                                      &uarr;           positve look ahead for 
                                      +-----------an end-of-comment marker
0 голосов
/ 11 августа 2010

Ну, это не так уж сложно.Все, что вам нужно сделать, это использовать модификатор s (PCRE_DOT_ALL, в котором . в регулярном выражении соответствует новым строкам):

$regex = '#\\*\\s*@license.*?\\*/'#s';
$string = preg_replace($regex, '*/', $string);

Это должно работать для вас (заметьте, не проверялось) ...

...