正则表达式失败

时间:2017-11-10 21:16:09

标签: php regex

我有这样的文字:

/**
 * @var \guervyl\cbind_attr_testBundle\Entity\Category
 *
 * @ORM\ManyToOne(targetEntity="guervyl\cbind_attr_testBundle\Entity\Category", inversedBy="song")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="category_id", referencedColumnName="id")
 * })
 */
private $category;

/**
 * @var \guervyl\cbind_attr_testBundle\Entity\User
 *
 * @ORM\ManyToOne(targetEntity="guervyl\cbind_attr_testBundle\Entity\User", inversedBy="song")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="user_id", referencedColumnName="id")
 * })
 */
private $user;

我想要编辑该部分:

* @ORM\ManyToOne(targetEntity="guervyl\cbind_attr_testBundle\Entity\Category", inversedBy="song")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="category_id", referencedColumnName="id")
     * })
     */
    private $category;

我的表达停留在$(\*.*@ORM\\ManyToOne\(.*)(\)(?:\s|.)*?private \$)

但是当我尝试选择其余category;时,当我设置c时我没有匹配(超时):(\*.*@ORM\\ManyToOne\(.*)(\)(?:\s|.)*?private \$c)

我想让正则表达式工作:(\*.*@ORM\\ManyToOne\(.*)(\)(?:\s|.)*?private \$category;)

我的正则表达式出了什么问题?

2 个答案:

答案 0 :(得分:2)

您是否正在尝试使用正则表达式从PHP文件中获取注释?不知道你是否意识到,但是PHP包含了解析语言的功能,这些功能可以让你轻松地获取注释(以及代码的其他部分),而不需要任何正则表达式。

您正在寻找的功能是token_get_all(),您可以获得一些完全符合您要求的示例代码from this answer here on SO

答案 1 :(得分:1)

匹配模式可以是:

.*ManyToOne(.|\n)*category;

模式意味着:

.*           Match anything zero or more times
ManyToOne    Literally match "ManyToOne"
(.|\n)*      Match anything (including line breaks) zero or more times
category;    Literally match "category;"

结果匹配将是:

 * @ORM\ManyToOne(targetEntity="guervyl\cbind_attr_testBundle\Entity\Category", inversedBy="song")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="category_id", referencedColumnName="id")
 * })
 */
private $category;

小提琴:Live Demo