0

次のテキストを検討してください。

$content=<<<EOT
    {
        "translatorID": "f4a5876a-3e53-40e2-9032-d99a30d7a6fc",
        "label": "ACL",
        "creator": "Nathan Schneider",
        "target": "^https?://(www[.])?aclweb\\.org/anthology-new/[^#]+",
        "minVersion": "1.0.7",
        "maxVersion": "",
        "priority": 100,
        "browserSupport": "gcs",
        "inRepository": true,
        "translatorType": 4,
        "lastUpdated": "2012-01-01 01:42:16"
    }

    // based on ACM translator
    function detectWeb(doc, url) {
      var namespace = doc.documentElement.namespaceURI;
        var nsResolver = namespace ? function(prefix) {
            if (prefix == 'x') return prefix; else return null;
        } : namespace;

        var bibXpath = "//a[./text() = 'bib']"
        if(doc.evaluate(bibXpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
          return "multiple"
        }
      //commenting out single stuff
      // if (url.indexOf("/anthology-new/J/")>-1)
      //  return "journalArticle";
      // else
      //  return "conferencePaper";
    }
EOT;

テキストの先頭との{間のテキストを選択したい。}以下をテストしましたが、目的のテキストが得られませんでした。

preg_match('~\{(.*)\}~m',$content,$meta);
var_dump( $meta);

なにが問題ですか?

4

4 に答える 4

2

複数行モードでも.、改行には一致しません。s(PCRE_DOTALL) 修飾子を使用して、改行に一致させることができます。

preg_match('~\{(.*)\}~sm',$content,$meta);
                      ^

ただし、あなたのケースでは、一致を非貪欲にする必要もあります。そうしないと、以下のソースコードからも選択されます。

preg_match('~\{(.*?)\}~sm',$content,$meta);
                  ^

デモ

于 2012-06-19T10:17:20.673 に答える
1

これはおそらくあなたが求めているものです:

preg_match('/\{(.*?)\}/s', $string, $result);
于 2012-06-19T10:18:42.730 に答える
1

チートシートhttp://www.cs.washington.edu/education/courses/cse190m/11su/cheat-sheets/php-regex-cheat-sheet.pdf言います:

 Base Character Classes
 .  (Period) – Any character except newline

しかし、それはまた言います

Pattern Modifiers
s   Dotall - . class includes newline
于 2012-06-19T10:13:51.493 に答える
0

試す

preg_match('~\{(.*)\}~m',$content,$meta,PCRE_MULTILINE);

追加ドキュメント http://php.net/manual/en/reference.pcre.pattern.modifiers.php

于 2012-06-19T10:22:38.590 に答える