正则表达式,如果它不包含特定字符,则获取完整字符串?

时间:2011-01-28 16:14:02

标签: php regex preg-match

我需要一个正则表达式的帮助,它将在下面的字符串中找到匹配项:

  

myDOG_test

     

myCAT_test

基本上,我想从这些路径返回'DOG'或'CAT'。

然后我有类似的字符串(全部以'my'开头),在我想要的值之后不包含下划线,在这种情况下,我只想在匹配组中返回FULL字符串。

  

myCentralReports

     

myDEMO3

这是我到目前为止的REGEXP:

.*?my(.*?)\_.*

这正确地将CAT&匹配组中的DOG,但我在匹配其他2个字符串时遇到问题。很显然,我在那里留下了硬编码的下划线,只是为了向您展示我的开始 - 但我需要为其他情况修改它。任何帮助表示赞赏!感谢。

3 个答案:

答案 0 :(得分:2)

不确定为什么需要正则表达式:

explode('_', $string);

第一个元素将包含myDOGmyDEMO3。如果需要,请移除'my',在第二种情况下是否需要'my'并不清楚。

答案 1 :(得分:0)

'/\smy(.+?)[_|\s]/'

这将在空白字符后跟“my”和下一个尾随下划线或空白字符之间得到任何内容。尝试一下。

答案 2 :(得分:0)

你可以这样做:

$list = array(' myDOG_test', 'myCAT_test',' myCentralReports', 'myDEMO3');

foreach($list as $elem) {
  preg_match("/^\s*my(.+?)(?:_|$)/", $elem, $m);
  echo "$elem : matches = ";print_r($m);
}

<强>输出:

 myDOG_test : matches = Array
(
    [0] =>  myDOG_
    [1] => DOG
)
myCAT_test : matches = Array
(
    [0] => myCAT_
    [1] => CAT
)
 myCentralReports : matches = Array
(
    [0] =>  myCentralReports
    [1] => CentralReports
)
myDEMO3 : matches = Array
(
    [0] => myDEMO3
    [1] => DEMO3
)