Php 分析/拆分正斜杠分隔的字符串

Php 分析/拆分正斜杠分隔的字符串,php,regex,parsing,text-extraction,delimited-text,Php,Regex,Parsing,Text Extraction,Delimited Text,这更像是一个普通的正则表达式问题,而不是一个特定于PHP的问题 我收到了不同的字符串,这些字符串可能如下所示: A/B/PA ID U/C/D 和我试图在中间斜线中提取具有空格的段(“/PA ID u”):使用< /P> preg\u match('/(\/PA.+)(\/.+$)/',$string,$matches) 然而,我得到的不是我期望的“/PA ID U”,而是“/PA ID U/C/D” 在最后一组中,如何使匹配“/.+”优先于“$” 补充说明: 我需要最后一组匹配另一个“/so

这更像是一个普通的正则表达式问题,而不是一个特定于PHP的问题

我收到了不同的字符串,这些字符串可能如下所示:

A/B/PA ID U/C/D

和我试图在中间斜线中提取具有空格的段(“/PA ID u”):使用< /P>

preg\u match('/(\/PA.+)(\/.+$)/',$string,$matches)

然而,我得到的不是我期望的“/PA ID U”,而是“/PA ID U/C/D”

在最后一组中,如何使匹配“/.+”优先于“$”


补充说明:

我需要最后一组匹配另一个“/somethingsomthing”或“”,因为字符串变化很大。如果我只匹配“/.+”,那么如果“/PA ID U”位于行的末尾,例如在“A/B/PA ID U”中,我将无法获取“/PA ID U”

基本上,我需要能够提取特定片段,如下所示:

给定:
“A/B/PA ID U/PA ID U/C/D”

摘录:
(A)、(B)、(PA ID U)、(PA ID U)、(C)、(D)


[更新]


我试图避免使用
split()
explode()
,因为这意味着我必须单独匹配“paidu”模式。除了只提取斜杠分隔的段外,我还需要验证子字符串是否匹配特定的模式。

我认为您可以最有效地使用split来完成所需的操作

split('/',$string);

请参阅:

我认为您可以最有效地使用split来完成您想要的任务

split('/',$string);
参见:

necramirez

(\w+\s?)+
应该能工作的

necramirez

(\w+\s?)+

您的正则表达式不工作,因为
+
正在贪婪。您可以通过在第一个
+
中添加一个非贪婪修饰符(一个
)来修复它,如下所示:

preg_match('/(\/PA .+?)(\/.+|$)/', '', $matches);
你也可以这样做:

'/\/(PA [^\/]+)(\/.+|$)/'

我把斜线移到了parens之外,以避免捕捉到它(我想你对斜线不感兴趣)。
[^\/]+
将捕获下一个斜杠之前的任何字符

您的正则表达式不工作,因为
+
正在贪婪。您可以通过在第一个
+
中添加一个非贪婪修饰符(一个
)来修复它,如下所示:

preg_match('/(\/PA .+?)(\/.+|$)/', '', $matches);
你也可以这样做:

'/\/(PA [^\/]+)(\/.+|$)/'

我把斜线移到了parens之外,以避免捕捉到它(我想你对斜线不感兴趣)。
[^\/]+
将捕获下一个斜杠之前的任何字符

在一个否定字符类中写入分隔符进行匹配,或者将分隔符作为文字字符进行拆分

代码:()

输出:

PA ID U
---
array (
  0 => 'PA ID U',
  1 => 'PA ID U',
)
---
array (
  0 => 'A',
  1 => 'B',
  2 => 'PA ID U',
  3 => 'PA ID U',
  4 => 'C',
  5 => 'D',
)

通过在否定字符类中写入分隔符进行匹配,或将分隔符作为文字字符进行拆分

代码:()

输出:

PA ID U
---
array (
  0 => 'PA ID U',
  1 => 'PA ID U',
)
---
array (
  0 => 'A',
  1 => 'B',
  2 => 'PA ID U',
  3 => 'PA ID U',
  4 => 'C',
  5 => 'D',
)

我在这里有点不知所措。我无法让这个正则表达式将给定的“A/B/paid U/paid U/C/D”提取到(A)、(B)、(paid U)、(paid U)、(C)、(D)中。php使用什么正则表达式风格?Perl?蟒蛇?任何其他?preg_匹配都作为对libpcre的调用实现。PCRE=Perl兼容的正则表达式我在这里有点不知所措。我无法让这个正则表达式将给定的“A/B/paid U/paid U/C/D”提取到(A)、(B)、(paid U)、(paid U)、(C)、(D)中。php使用什么正则表达式风格?Perl?蟒蛇?任何其他?preg_匹配都作为对libpcre的调用实现。PCRE=Perl兼容的正则表达式