我是Scala的新手,我不确定正则表达式的工作原理。
我想从字符串中提取值。
String = "key1=value1&key2=value2&key3=value3"
我需要找出什么是 value2 。
我可以用正则表达式吗?有什么指针吗?
到目前为止,我尝试了这个但是它无效:
"/key2=([^&]*)/"
答案 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";
}
?>