2015-03-26 3 views
1

Я пытаюсь разобрать значение а документ блока комментариевPHP Regex и DocComment Значение Синтаксический

$str = "/** 
* @title View/List Permissions 
* @description Allow user to view list of permissions 
*/"; 

код, который я использую показано ниже:

$re = "/^.*@title\s+(\S*).*@description\s+(\S*).*$/s"; 
preg_match($re, $str, $matches); 

Текущий результат выглядит следующим образом :

[0] View/List 
[1] Allow 

https://regex101.com/r/dA7jW2/2

Что я могу сделать, чтобы получить заполнение «Разрешения просмотра/списка» и «Разрешить пользователю просматривать список разрешений»?

Я попытался изменить регулярное выражение, заменив \ s + (\ S *). * На \ s + (\ S. *), и пока он работает в некоторой степени, он добавляет * из следующей строки

https://regex101.com/r/dA7jW2/3

Любые идеи помогут ..

Благодаря

ответ

0

Я изменил \S к [^\n] и сопоставил остальную часть строки до конца строки.

^.*@title\s+([^\n]*).*@description\s+([^\n]*).*$ 

Выходы:

MATCH 1 
1. [14-35] `View/List Permissions` 
2. [52-90] `Allow user to view list of permissions` 

https://regex101.com/r/dA7jW2/4

Это [^] негативный класс символов, так что вы можете перечислить все символы, которые вы не хотите, чтобы соответствовать. [^\n] говорит, что символ совпадения не является новой строкой.

+0

Приветствия за это :) – user2011139

0

Try

/^.*@title\s+(.*)\s*\*\s*@description\s+(.*).*$/s 

проблемы вы испытываете, являются:

1) Когда вы делаете (\S*) останавливается после первого пробела символа вы получите (в этом случае, пространство), так что вам нужно сделать (.*)

2) Вы нужно обрабатывать любое количество разноса после «Права доступа» (пробелы или символы возврата), а затем с помощью *, после чего каких-либо дополнительных пробелов перед «@description»

Надежда, что помогает

Смежные вопросы