具有特定字符串结构的preg_match正则表达式

时间:2013-04-18 15:06:09

标签: php regex preg-match

编辑: 我将收到用户输入,可以是任何字符串。 我只想标记那些具有特定结构的字符串。

// Flag
$subject = 'Name 1 : text / Name 2 : text';

// Flag
$subject = 'Name 1 : text / Name 2 : text / Name 3';

// Flag
$subject = 'Name 3 / Name 2 / Name 3';

// Do NOT flag
$subject = 'Name 1 : text, Name 2, text, Name 3';

// Do NOT flag
$subject = 'This is another string';

所以基本上标记每个至少有一个正斜杠的字符串。 这可以用正则表达式完成吗? 谢谢!

2 个答案:

答案 0 :(得分:1)

我可能很好地误解了你想要的是什么,但我认为这可能是你想要的(没有正则表达式):

<?php
    $subject = 'Name 1 : text / Name 2 : text / Name 3';

    $subjectArray = array();
    $explode = explode(' / ', $subject);
    for ($i = 0; $i < count($explode); $i++) {
        list($name, $text) = explode(' : ', $explode[$i]);
        $subjectArray[] = array(
            'name' => $name,
            'text' => $text
        );
    }
    print_r($subjectArray);
?>

将输出:

Array
(
    [0] => Array
        (
            [name] => Name 1
            [text] => text
        )

    [1] => Array
        (
            [name] => Name 2
            [text] => text
        )

    [2] => Array
        (
            [name] => Name 3
            [text] => 
        )

)

答案 1 :(得分:0)

您需要清楚地定义same structure的规则,但只是为了让您开始使用reges将适用于您的两个示例:

$re='#^Name\s+\d+\s*:\s*\w+\s*/\s*Name\s+\d+\s*:\s*\w+(?:\s*/\s*Name\s+\d+)?$#i';
if (preg_match($re, $str, $match))
   print_r($match);