1

30分間グーグルで検索しましたが、役立つものは何も見つかりませんでした.

私の問題は、RegExp を使用して文字列から何かを解析しようとしていることです。私は通常、PHP 開発者であり、preg_match_all()それを使用しますが、これは C# には存在しないため (ああ、本当に)、別のものが必要です。

次の文字列があるとします。

string test = "Hello this is a 'test' a cool test!";

ここで、一重引用符 ( ' ) で囲まれたものを取得したいと思います - この例ではtest .

助けてくれてありがとう。下手な英語でごめんなさい、それは私の母国語ではありません! :/

4

4 に答える 4

2

これを行うためのより簡単で非正規表現の方法:

string textInQuotes = String.Empty;
string[] split = test.Split('\'');
if (split.Length > 2) textInQuotes = split[1];
于 2012-08-24T19:50:45.553 に答える
2

C# の方法は、そのクラスとメソッドpreg_match_allを使用することです。System.Text.RegularExpressions.RegexMatch

于 2012-08-24T19:38:14.787 に答える
1

これがサンプルアプリケーションコードです。

using System;
using System.Text.RegularExpressions;

namespace ExampleApp
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            // This is your input string.
            string test = "Hello this is a 'test' a cool test!";
            // This is your RegEx pattern.
            string pattern = "(?<=').*?(?=')";

            // Get regex match object. You can also experiment with RegEx options.
            Match match = Regex.Match(test, pattern);
            // Print match value to console.
            Console.WriteLine(match.Value);
        }
    }
}

それがheplsであることを願っています!

于 2012-08-24T19:45:32.360 に答える
1

これは、テキストの引用部分で区切り文字をエスケープできる正規表現ソリューションです。*nix バックスラッシュ スタイルのエスケープを使用する場合は、正規表現の適切な部分を , に置き換えるだけ('')です(\\')

static readonly Regex rxQuotedStringLiteralPattern = new Regex(@"
                 # A quoted string consists of
    '            # * a lead-in delimiter, followed by
    (?<content>  # * a named capturing group representing the quoted content
      (          #   which consists of either
        [^']     #   * an ordinary, non-delimiter character
      |          #   OR
        ('')     #   * an escape sequence representing an embedded delimiter
      )*         #   repeated zero or more times.
    )            # The quoted content is followed by 
    '            # * the lead-out delimiter
    "
    , RegexOptions.ExplicitCapture|RegexOptions.IgnorePatternWhitespace
    ) ;

public static IEnumerable<string> ParseQuotedLiteralsFromStringUsingRegularExpressions( string s )
{
  for ( Match m = rxQuotedStringLiteralPattern.Match( s ?? "" ) ; m.Success ; m = m.NextMatch() )
  {
    string raw    = m.Groups[ "content" ].Value ;
    string cooked = raw.Replace( "''" , "'" ) ;
    yield return cooked ;
  }
}
于 2012-08-24T20:41:21.437 に答える