0

我有一些代码,例如:

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

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

  1. '你好'
  2. ' == 2 && '
  3. '世界'

这不是我所希望的。我只想匹配单引号和里面的文字。

  1. '你好'
  2. '世界'

任何机构有任何想法?

4

4 回答 4

0

两个匹配的组 int this 应该会选择您引用的值:

^.*(\'.*?\').*(\'.*?\').*$
于 2013-03-16T10:05:32.473 回答
0

对于您的具体情况

\'[a-z]*?\'

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

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

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

笔记: '?' after * 使得 * 不贪婪,所以它不会尝试搜索直到最后一个报价。

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

于 2013-03-16T10:16:14.047 回答
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
"
于 2013-03-16T10:22:53.853 回答
0

这就是我想出的!

preg_match_all("#'[^'\n\r]*'#", $subject, $matches);
  1. 匹配'
  2. 匹配任何不是'、换行或回车的字符。
  3. 匹配'

没有所有的转义,我认为它更具可读性——无论如何,它是一个正则表达式。

于 2013-03-16T12:38:46.233 回答