2011-01-21 102 views
1

我试图在PHP中使用preg_match函数来匹配两种类型的字符串,可能如下。正则表达式可选匹配

  • '_mything_to_newthing'
  • '_onething'
  • '_mything_to_newthing_and_some_stuff'

在第三个以上,我只希望 “mything” 和 “newthing” 后自带所以一切第三部分只是用户可以添加的一些可选文本。理想情况下,正则表达式会出现在上面的情况中;

  • 'mything', 'newthing'
  • '' onething
  • 'mything', 'newthing'

的模式应该尽可能匹配-ZA-Z0-9: - )

我的正则表达式是可怕的,所以任何帮助将不胜感激!

谢谢先进。

回答

1

假设你正在谈论_ deliminated文本:

$regex = '/^_([a-zA-Z0-9]+)(|_to_([a-zA-Z0-9]+).*)$/'; 

$string = '_mything_to_newthing_and_some_stuff'; 
preg_match($regex, $string, $match); 
$match = array(
    0 => '_mything_to_newthing_and_some_stuff', 
    1 => 'mything', 
    2 => '_to_newthing_and_some_stuff', 
    3 => 'newthing', 
); 

至于什么更远,请提供更多的细节和更好的示例文本/输出

编辑:你总是可以只使用explode

$parts = explode('_', $string); 
$parts = array(
    0 => '', 
    1 => 'mything', 
    2 => 'to', 
    3 => 'newthing', 
    4 => 'and', 
    5 => 'some', 
    6 => 'stuff', 
); 

只要格式一致,它应该工作我们ll ...

+0

谢谢!你知道..我从来没有想过它是`_`分隔文本!我可能只是使用`explode()`;) – tarnfeld 2011-01-21 23:39:56