在scala中使用正则表达式,找到与键对应的值

时间:2016-10-18 12:40:25

标签: regex scala

我是Scala的新手,我不确定正则表达式的工作原理。

我想从字符串中提取值。

String = "key1=value1&key2=value2&key3=value3"

我需要找出什么是 value2

我可以用正则表达式吗?有什么指针吗?

到目前为止,我尝试了这个但是它无效:

"/key2=([^&]*)/"

3 个答案:

答案 0 :(得分:2)

以下是使用match和非固定正则表达式匹配所需内容的方法:

var str = "key1=value1&key2=value2&key3=value3"
val pattern = """key2=([^&]*)""".r.unanchored
val res = str match {
   case pattern(res) => println(res)
   case _ => "No match"
}

请参阅this demo

请注意,在match范围内,默认情况下会锚定模式,为了在字符串中的任何位置找到匹配项,您应该创建模式.unanchored

答案 1 :(得分:1)

你也可以不用正则表达式。首先使用&进行拆分,然后使用=

str.replaceAll("\\s+", "").split("&")
.map { str => 
  val Array(a, b) = str.split("=") 
  a -> b 
}.toMap.get("key2")

Scala REPL

scala> str.replaceAll("\\s+", "").split("&").map { str => val Array(a, b) = str.split("="); a -> b }.toMap.get("key2")
res23: Option[String] = Some("value2")

答案 2 :(得分:0)

您可以使用以下正则表达式

将所需的值匹配到第一个匹配组中
^.*?key1=(.+?)(&.*?)*$
^.*?key2=(.+?)(&.*?)*$
^.*?key3=(.+?)(&.*?)*$
...

这取决于&values没有出现def findValueForKeyI(i: Int, str: String): Option[String] = { val regex = ("^.*?key" + i + "=(.+?)(&.*?)*$").r val matcher = regex.pattern.matcher(str) matcher.matches match { case true => Some(matcher.group(1)) case _ => None } } 的事实。您可以进行更多实验 - regex101 link

现在,让我们转到必需的Scala,

scala> :pa
// Entering paste mode (ctrl-D to finish)

def findValueForKeyI(i: Int, str: String): Option[String] = {
  val regex = ("^.*?key" + i + "=(.+?)(&.*?)*$").r
  val matcher = regex.pattern.matcher(str)
  matcher.matches match {
    case true => Some(matcher.group(1))
    case _ => None
  }
}

// Exiting paste mode, now interpreting.

findValueForKeyI: (i: Int, str: String)Option[String]

scala> val str = "key1=value1&key2=value2&key3=value3"
str: String = key1=value1&key2=value2&key3=value3

scala> findValueForKeyI(1, str)
res24: Option[String] = Some(value1)

scala> findValueForKeyI(2, str)
res25: Option[String] = Some(value2)

scala> findValueForKeyI(3, str)
res26: Option[String] = Some(value3)

scala> findValueForKeyI(4, str)
res27: Option[String] = None

现在让我们在Scala控制台中尝试,

        <?php

      require 'core.inc.php';
     include 'connect.inc.php';

     if (!loggedin()) {

              if (isset($_POST['first_name']) && isset($_POST['last_name']) && isset($_POST['user_name']) &&  isset($_POST['password']) && isset($_POST['retype_password'])) {

    $first_name = $_POST['first_name'];
    $last_name = $_POST['last_name'];
    $username = $_POST['user_name'];
    $password = $_POST['password'];
    $retype_password = $_POST['retype_password'];
    $password_hash = password_hash($password, PASSWORD_DEFAULT);


     if (!empty($first_name) && !empty($last_name) && !empty($username) && !empty($password) && !empty($retype_password)) {

        if ($password!=$retype_password) {
            echo 'Password does not matched';
        } else {

             $select_user_query = "SELECT `user_name` FROM `company_login` WHERE `user_name` = '$username'";
            $run_user_query = mysqli_query($db_connect,$select_user_query);

             if (mysqli_num_rows($run_user_query)==NULL) {

                $insert_new_userinfo = "INSERT INTO`company_login`(`user_name`, `password`, `first_name`, `last_name`) VALUES ('".mysqli_real_escape_string($db_connect,$username)."','".mysqli_real_escape_string($db_connect,$password_hash)."','".mysqli_real_escape_string($db_connect,$first_name)."','".mysqli_real_escape_string($db_connect,$last_name)."')";
                    if ($insert_run = mysqli_query($db_connect,$insert_new_userinfo)) {
                    header('Location: signup_success.php');
                } else {
                    echo 'Sorry, we couldn\'t register you at this time. Please try again later.';
                }


            } else {
                echo 'The username '.$username.' already exists'; 
            }

        }

    } else {
        echo 'All fields are required.';
    }


    }
  ?>

      <form action="register.php" method="post">

   First Name : <br/><input type="text" name="first_name" value="<?php echo @$first_name ?>"><br/><br/>
   Last Name : <br/><input type="text" name="last_name" value="<?php echo @$last_name?>"><br/><br/>
  Username : <br/><input type="text" name="user_name" value="<?php echo @$username?>"><br/><br/>
Password : <br/><input type="password" name="password"><br/><br/>
Re-type Password : <br/><input type="password" name="retype_password"><br/>     <br/>
    <input type="Submit" value="Register">

    </form>

    <?php
     } elseif (loggedin()) {
        echo "You're already registered and logged in";
     }

     ?>