正则表达式:匹配两个相邻的字符串

时间:2013-03-16 10:01:56

标签: php regex preg-match

我有一些代码,例如:

if('hello' == 2 && 'world' !== -1){
  return true;
}

我在if语句中匹配条件时遇到了一些麻烦。我想到的第一个正则表达式是/'.*'/,但这符合:

  1. '你好'
  2. '== 2&& “
  3. '世界'
  4. 这不是我所希望的。我只想匹配单引号和里面的文字。

    1. '你好'
    2. '世界'
    3. 任何团体都有任何想法吗?

4 个答案:

答案 0 :(得分:0)

这两个匹配的组应该选择你引用的值:

^.*(\'.*?\').*(\'.*?\').*$

答案 1 :(得分:0)

针对您的具体情况

\'[a-z]*?\'

对于整个代码,如果引号中包含大写字符,则可以使用

\'[a-zA-Z]*?\'

但是,如果引号中也有特殊字符,那么您可以使用@Chris Cooper建议的内容。根据您的需要,可能会有各种各样的答案。

注意:'?'在*使*非贪婪之后,所以它不会尝试搜索直到最后一个引用。

使用哪种正则表达式来获得答案也很重要。

答案 2 :(得分:0)

试试这个

preg_match_all('/\'[^\'\r\n]*\'/m', $subject, $result, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($result[0]); $i++) {
    # Matched text = $result[0][$i];
}

<强>解释

"
'           # Match the character “'” literally
[^'\\r\\n]    # Match a single character NOT present in the list below
               # The character “'”
               # A carriage return character
               # A line feed character
   *           # Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
'           # Match the character “'” literally
"

答案 3 :(得分:0)

这是我想出来的!

preg_match_all("#'[^'\n\r]*'#", $subject, $matches);
  1. 匹配'
  2. 匹配任何非',新行或回车符。
  3. 匹配'
  4. 如果没有所有的转义,我认为它更具可读性 - 无论如何都是正则表达式。