写一段匹配字符串必须有大写字母、小写字母、数字、特殊字符,并且字符不能在键盘上连续相邻3个及以上,字符长度不小于10不大于20的正则表达式
时间: 2024-02-02 13:05:21 浏览: 37
请注意,以下正则表达式是可以匹配上述要求的,但并不一定是最优解:
```
^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}[\]:;"'<>,.?/])[A-Za-z\d~!@#$%^&*()_+`\-={}[\]:;"'<>,.?/]{10,20}(?<!([A-Za-z\d~!@#$%^&*()_+`\-={}[\]:;"'<>,.?/])\1{2})
```
解析如下:
- `^` 表示匹配字符串开头。
- `(?=.*[A-Z])` 表示必须包含至少一个大写字母。
- `(?=.*[a-z])` 表示必须包含至少一个小写字母。
- `(?=.*\d)` 表示必须包含至少一个数字。
- `(?=.*[~!@#$%^&*()_+`\-={}[\]:;"'<>,.?/])` 表示必须包含至少一个特殊字符。
- `[A-Za-z\d~!@#$%^&*()_+`\-={}[\]:;"'<>,.?/]{10,20}` 表示字符集合,长度在 10 到 20 之间。
- `(?<!([A-Za-z\d~!@#$%^&*()_+`\-={}[\]:;"'<>,.?/])\1{2})` 表示负向回溯,不允许有 3 个及以上连续相邻的字符。
相关问题
仅由大写字母和小写字母组成的衣服串,在不考虑大小写的情况下,有多少对相邻的字母相等?Java 代码
可以通过遍历字符串,依次比较其相邻字母是否相等来实现此问题的计算,示例 Java 代码如下:
```java
public static int countEquals(String s) {
int count = 0;
s = s.toLowerCase(); // 考虑大小写不敏感,将字符串转换为小写
for(int i=1; i<s.length(); i++) {
if(s.charAt(i) == s.charAt(i-1)) {
count++;
}
}
return count;
}
```
该函数接受一个字符串 s,返回其中仅由大写字母和小写字母组成的衣服串,在不考虑大小写的情况下,有多少对相邻的字母相等。函数使用一个计数器 count,遍历字符串 s,每次比较相邻字母是否相等,如果相等则将计数器加一,最后返回计数器的值。
使用示例:
```java
String s = "aAabBbcCdD";
int count = countEquals(s); // 返回 3,对应的相邻字母分别是 a/A, b/B, c/C
```
注意,该函数没有考虑输入字符串 s 为空或者 null 的情况,需要根据具体需求进行处理。
用c语言写一个函数,要求传入链表头节点后,把链表中所有节点按该节点中的字符串的第一个字符在字母表顺序进行排序,要求大写字母在前小写字母在后,最后再返回这个链表的头节点
好的,这个问题可以回答。以下是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
typedef struct Node {
char str[100];
struct Node *next;
} Node;
Node *sortList(Node *head) {
if (head == NULL || head->next == NULL) {
return head;
}
Node *p = head;
Node *q = head->next;
Node *h = NULL;
while (q != NULL) {
if (tolower(p->str[0]) > tolower(q->str[0]) || (tolower(p->str[0]) == tolower(q->str[0]) && p->str[0] > q->str[0])) {
p->next = q->next;
q->next = p;
if (p == head) {
head = q;
} else {
h->next = q;
}
h = q;
q = p->next;
} else {
h = p;
p = q;
q = q->next;
}
}
return head;
}
int main() {
Node *head = NULL;
Node *tail = NULL;
char str[100];
while (scanf("%s", str) == 1) {
Node *node = (Node *)malloc(sizeof(Node));
strcpy(node->str, str);
node->next = NULL;
if (head == NULL) {
head = node;
} else {
tail->next = node;
}
tail = node;
}
head = sortList(head);
Node *p = head;
while (p != NULL) {
printf("%s ", p->str);
p = p->next;
}
printf("\n");
return 0;
}
```
这个程序定义了一个链表节点结构体 `Node`,其中包含一个字符串 `str` 和一个指向下一个节点的指针 `next`。`sortList` 函数接受一个链表头节点指针 `head`,并返回排序后的链表头节点指针。
在 `sortList` 函数中,我们使用冒泡排序的思想,依次比较相邻的节点,如果它们的字符串需要交换位置,就交换它们的位置。具体来说,我们比较两个节点的字符串的第一个字符,如果第一个节点的字符在字母表顺序中排在第二个节点的字符之后,或者两个节点的字符相同但第一个节点的字符是大写字母而第二个节点的字符是小写字母,就交换它们的位置。最后返回排序后的链表头节点指针。
在 `main` 函数中,我们读入一些字符串,创建一个链表,并调用 `sortList` 函数对链表进行排序。最后输出排序后的链表中的字符串。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)