Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式失败_Php_Regex - Fatal编程技术网

Php 正则表达式失败

Php 正则表达式失败,php,regex,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", referencedColumnNa

我有以下案文:

/**
 * @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\$)

但是当我尝试选择rest
类别时,当我设置c时,我没有得到匹配(超时):
(\*.@ORM\\ManyToOne\(.*)(\)(?:\s|。)*?private\$c)

我希望正则表达式能够工作:
(\*.@ORM\\ManyToOne\(.*)(?:\s|。)*?private\$category;)


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

匹配模式可能是:

.*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;

小提琴:

匹配模式可以是:

.*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;

Fiddle:

您试图使用正则表达式从PHP文件中获取注释?不确定您是否知道,但是PHP包含解析语言的函数,它允许您非常轻松地获取注释(以及代码的其他部分),而无需任何正则表达式


您正在寻找的函数是,您可以得到一些示例代码,这些代码完全符合您的要求。

您试图使用正则表达式从PHP文件中获取注释?不确定您是否知道,但是PHP包含解析语言的函数,它允许您非常轻松地获取注释(以及代码的其他部分),而无需任何正则表达式


您正在寻找的函数是,您可以得到一些示例代码,这些代码完全符合您的要求。

这与php中的正则表达式有关吗?或者php的标记只是因为您正在挖掘的文件是php吗?试试看。@Randall它只是针对正则表达式的。这不是针对特定的编程语言,我看到您删除了PHP标记,所以这不是一个PHP问题。PHP本身提供了一些内置的反射类。另外,由于这些都是条令注释——我相信条令核心有注释解析类——可以作为参考。Regexr regex引擎与regex101 live demo中提供的不同,因此不支持原子组。全球可用的替代方案是将
(?:\s |.*)?
更改为
[\s\s]*?
。这与php中的正则表达式有关吗?或者php的标记只是因为您正在挖掘的文件是php吗?试试看。@Randall它只是针对正则表达式的。这不是针对特定的编程语言,我看到您删除了PHP标记,所以这不是一个PHP问题。PHP本身提供了一些内置的反射类。另外,由于这些都是条令注释——我相信条令核心有注释解析类——可以作为参考。Regexr regex引擎与regex101 live demo中提供的不同,因此不支持原子组。一个全球可用的替代方案是将
(?:\s|。)*?
更改为
[\s\s]*?
。它只是选择了它,但我的正则表达式只是替换
@ORM\ManyToOne(…)
正则表达式不用于替换字符串,只用于匹配模式。您将使用您的主要编程语言来进行替换。是的,您可以在regex模式中使用捕获组来进行替换。它只是选择了它,但我的regex只是替换
@ORM\manytone(…)
regex不用于替换字符串,而只是用于匹配模式。您可以使用您的主要编程语言来进行替换。是的,您可以在正则表达式模式中使用捕获组来进行替换。